iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
1

Class
Ruby 是一款物件導向程式語言(Objecte-Oriented Programming, OOP),物件化的很徹底的程式語言,在 Ruby 的世界裡,幾乎所有的東西都是物件。

什麼是類別呢?

以汽車來說,汽車就是一個類別class,然後裡面有很多方法 像是 轉彎 煞車 發動...

class 汽車
  def 左轉
  end
  
  def 停車
  end
......

end

定義類別

在 Ruby 要定義一個類別,使用的關鍵字是 class:

class 類別的名字
  #...
end

所有類別的名字都是一個常數。
所以才會在撰寫類別名稱的時候,必須以大寫開頭(定義為常數)才能運作。

class Car #=> 開頭必須是大寫

end

如果我想定義一個汽車類別,順便在裡面先定義好一些方法,就可以這樣寫:

class Car

  def turn_right
      puts "右轉"
  end
  
  def stop
      puts "煞車"
  end
end

有了 Car 類別之後,就可以用這個類別的 new 方法來產生實體:

toyota = Car.new
toyota.turn_right #=> 右轉

honda = Car.new
honda.stop  #=> 煞車

初始化

如果要透過 new 方法傳參數進來,在類別裡面必須有個名為 initialize 的方法來接收傳進來的參數。在 initialize 方法裡,常見的手法是會把參數傳進來給內部的實體變數(instance variable)。

class Car

  def initialize(type, cc)
    @type = type
    @cc = cc
  end
  
  def kind
      puts "#{type}"
  end
  
  def displacemint
      puts "#{cc}"
  end

end


honda = Car.new(sedan, 1800)
honda.kind  #=>sedan
honday.displacemint  #=>1800

在 Ruby 裡面,所有的類別的類別都是 Class 這個類別。

Object.class
# => Class

Kernel.class
# => Module
Module.class
# => Class
Class.class
#=> Class

在 Ruby 的世界中,所有的類別其實都是 Class 這個類別的實體表現而已。
而父類別的的類別方法,則可以作為在定義新類別時的 Block 中使用,用來拓展一個類別的多樣性。


上一篇
DAY11 程式碼區塊(Block)
下一篇
DAY13 模組 (module)
系列文
毫無基礎學習 Ruby on Rails 的 甘苦心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言