類別與實體 class and instance
什麼是類別呢?
這裡例舉個實際的例子讓大家明白。
首先請問大家,有沒有吃過紅龜粿呢>ˇ</!我最喜歡吃這種古早味的點心了,雖然吃下去會很胖也很常噎到,但是包蘿蔔絲的素食紅龜粿或草仔粿好好吃唷~,都會很珍惜、小心翼翼地、滿懷感激吃下去。
那麼,紅龜粿和類別有什麼關聯呢?咳咳,是這樣子的,製作紅龜粿會有個模具,稱之為「粿模」(或叫做「粿印」、「粿模」、「餅印」),在傳統的農業社會時代,每逢年過節,家家戶戶都會使用各式各樣的「粿模」印製代表吉祥、長壽、豐收……等各種不同樣貌的紅龜粿唷!
同樣的模具,可以印製多個長得相同的紅龜粿,這就是「類別(Class
)」的概念,紅龜粿則是屬於該類別的物件,就稱為「實體(Instance)」。
如何定義類別?
在Ruby世界中,要建置一個物件,首先要定義類別的特徵,然後建立一個實體。
使用class
…end
來實現這件事,並在範圍中定義類別的方法(method)def
…end
,對應於該類別物件的某些行為。
要注意的是:類別的命名規則,必須是「常數」,也就是首字英文字母要大寫。
範例如下:
1 | class Rabbit |
PS:在字串裡面使用#{}
,便可以使用定義好的變數
產生實體
定義好Rabbit
類別後,便可以產生許多相同的實體,並賦予他們不同的行為唷。
範例:
1 | melody = Rabbit.new |
繼承
說到類別,也會同樣講到繼承。
日常生活中的物件類別都會分有階層,如我們所熟悉的生物分類法:界、門、綱、目、科、屬、種。
兔子哺乳類,而哺乳類都屬於動物。由這樣的概念推導,我們將共同特徵分在同一類,較小的類別會繼承 (inherit) 具有所屬較大類別的特徵。如果所有哺乳類都會吃東西,那麼所有兔子也會吃東西。
範例:
1 | class Animal |
new出來的melody繼承Animal,因此同時具有eat、speak的方法唷!
實體變數(instance variable)
在實務上,在設計Rails專案時,最常使用的是「實體變數(instance variable)」。
實體變數的寫法為在變數前面加一個@
,顧名思義,是活在每個實體裡的變數,而且每個實體之間互不相影響。
在Rails專案中,可以串連Controller與View之間的關聯唷。
參考資料
- 更多衍伸知識,可以參考龍哥的書:為你自己學 Ruby on Rails類別(Class)與模組(Module)
- Ruby 使用手冊類別 Classes
本文於 2020-09-17 發表在舊網站。