Ruby 使用手冊

類別 Classes

這個世界充滿著物件,我們都能把它們分門別類。例如,小孩子看到狗,不管是甚麼品種,可能都會叫牠作「汪汪」;我們自然地就會把世界的不同物件歸類。

物件導向程式語言的術語中,像「狗」這種類型,我們會稱為類別 (class),而屬於該類別的物件就稱為實例 (instance)

在 Ruby 或其他物件導向程式語言中,要建置一個物件,首先要定義類別的特徵,然後建立一個實例。下例闡述這個過程,首先定義一個簡單的 Dog 類別。

ruby> class Dog
    |   def speak
    |     puts "Bow Wow"
    |   end
    | end
   nil

Ruby 中,關鍵字 classend 中間的程式碼,即是類別的定義。這個範圍中,從 def 開始則定義了類別的方法 (method)(如上一節所述),對應於該類別物件的某些行為。

我們已經定義了 Dog 的類別,現在就能建立狗 (dog) 了:

ruby> pochi = Dog.new
   #<Dog:0xbcb90>

我們為 Dog 類別建立一個新實例,並命名為 pochi。任何類別的 new 方法都可用於建立新實例。根據我們類別的定義,pochi 屬於 Dog 類別,因此具備 Dog 的所有特性。因為我們對於 Dog 的概念很簡單,我們只能讓 pochi 玩一項把戲。

ruby> pochi.speak
Bow Wow
   nil

為類別建立實例,有時也稱為實例化 (instantiating) 該類別。我們要先有狗,才能享受與牠對話的樂趣。我們無法讓 Dog 類別 (class) 對著我們叫。

ruby> Dog.speak
ERR: (eval):1: undefined method `speak' for Dog:class

這就好像你無法吃一個 三明治的抽象概念

另一方面,如果我們想要聽見一隻狗的叫聲,而不想有任何情感的連繫,我們可以創造(實例化)一隻暫時的狗,讓牠發出聲音後就消失。

ruby> (Dog.new).speak   # 或常用的是 Dog.new.speak
Bow Wow
   nil

你會說:「等一下,這可憐的小狗叫完就會消失?」是的:如果我們懶得為牠取名字(就好像我們的 pochi),Ruby 的自動垃圾收集功能會認為這是一隻沒人要的垃圾狗,就會無情地把牠拋棄。這其實沒什麼,反正我們可以隨意創造我們要的狗。

Copyright (c) 2005-2008 Mark Slagell,中文翻譯 Ruby Taiwan 社群

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

A copy of the license is included in the section entitled "GNU Free Documentation License."