iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0
自我挑戰組

今晚我想來點 Ruby on Rails 系列 第 29

<Day 29>加油好嗎?撰寫自己的類別

  • 分享至 

  • xImage
  •  

什麼是類別?

類別是建立物件導向程式設計的基礎,可以幫助你在建立物件時定義你要的”藍圖“,物件都是類別的產物。什麼?你問說什麼是物件?

物件是一個獨立的”東西“,有自己的身份跟資料,比如說:

建立書的時候,以一個書類別為藍圖,這個類別定義了所有的書有什麼屬性

一個書名
一個作者
書頁,等等...

每本書都是一個物件,你可以做出許多的物件這都要感謝“書”這個類別。這就是建立類別的意義,在你的 ruby 裡類別都是可以重複使用的“藍圖”。只要知道怎麼撰寫類別,你就可以編寫物件導向程式設計了。

如何建立一個 ruby 類別,建立類別的語法就像這樣:

class Orange
end

請注意:
類別名稱要以大寫開頭,以 class 開頭 end 結尾,一個空的類別是非常的不好用,說歸說,但你還是可以從空類別建立物件。介紹其他建立類別的方法(像是 Class.new),但是這些方法只在特定情況下有用。

一個類別,多個物件

這個用法是將類別看成一個方法的容器使用,實體變數 & 常數,架構一個藍圖讓你可以在建立物件的時候使用。可以在建立物件的時候使用這些新方法。

像這樣:

Orange.new

你知道建立物件的過程稱作“實體化”,你可以稱那個物件是類別的實體。至於為什麼要建立物件呢?因為每個物件都是不同且獨一無二的。每個物件都有自己的身份。

比如說有一個 orange 類別,每個你創造 orange 物件都有他自己的重量,哪裡種的,什麼等級的品質等等。

讓建立的 ruby 物件更有用

當你開始加入實體方法&實體變數給類別,類別才會開始變得有用處。方法都是你的類別可以做的事。這樣比喻,你可以把橘子壓成果汁。那你就可以在類別裡面這樣做來實踐這個動作:

class Orange
  def squeeze
    puts "Here's your juice!"
  end
end
orange = Orange.new
orange.squeeze

這些方法都會變成物件的指令。每一個你創造的橘子物件都可以使用"squeeze"方法,這是其中一個使用類別的好處。

class Orange
  def initialize
    @juice_available = 100
  end
  def squeeze
    @juice_available -= 50
  end
end

實體變數與區域變數不同,因為因為實體變數是以 @ 符號開頭,你無法在類別外使用除非你定義一個 attr_accessor。

類別是什麼?

當在 ruby 操作物件的時候,去了解類別跟物件是從哪裡做出來是對你非常有幫助的。試一試:

"".class
# String
[].class
# Array
orange.class
# Orange (assuming orange = Orange.new)

為什麼這會對你有幫助?

每一個方法都像是一個引擎幫助 ruby 運行,如果你熟悉這個類別知道有哪些方法,那所有從這個類別創造出來的物件你就知道有哪些方法可以使用。


上一篇
<Day 28>如何使用環境變數
下一篇
<Day 30>如何使用 scope
系列文
今晚我想來點 Ruby on Rails 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言