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