iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
Software Development

Zero to Ruby on Rails系列 第 13

Day 13 - Object-Oriented Programming - part 4 物件導向程式設計(四)

  • 分享至 

  • xImage
  •  

在 Ruby 中,模組是一種抽象的概念,它允許你將方法和常數組織在一起,以便重複使用和共享

定義模組

跟類別一樣命名規定 = 必須是常數

module Invisible 
  def disappear
    puts "vanish!" 
  end
end

引入模組

class Bat 
  include Invisible
end

batman = Bat.new
batman.disappear

模組&類別的差異?

  1. 實體化: 類別可以被實體化,生成多個物件,模組不能被實體化,主要用於封裝方法和常數
  2. 繼承關係: 類別之間存在單一繼承關係,一個類別只能直接繼承自一個父類別,模組之間的關係是多對多的,多個模 組可以被包含在多個類別裡
  3. 實體變數: 類別可以有實體變數,用於存儲物件的狀態,模組不能擁有實體變數,通常只包含方法和常數

include

include 是一個用於將模組的方法添加到類別中的方法,使用 include 時,模組的方法成為該類別的實體方法,可以在該類別的所有實體上調用

module Swimmer
  def swim
    puts "swimming!!!"
  end
end

class Bear
  include Swimmer
end

class Fish
  include Swimmer
end

bird = Bird.new
fish = Fish.new

bird.swim  # 印出:swimming!!!
fish.swim  # 印出:swimming!!!

extend

extend是一個用於動態將模組中的方法添加到對象(實體)上的方法,主要目的是為對象提供特定功能,而不影響類別本身

module MyModule
  def say_hello
    puts "Hello from MyModule!"
  end
end

class MyClass
end

obj = MyClass.new
obj.extend(MyModule)

obj.say_hello  # 印出:Hello from MyModule!

namespace

遇到同名類別時可以將類別包在不同的 module 裡,這麼一來就不會用錯類別了

module Marvel 
  class Hero 
  end
end

module Dc 
  class Hero 
  end
end

ironman = Marvel::Hero.new
batman = Dc::Hero.new

預告

Day 14 預計介紹 Rails 簡介,我們明天見!


上一篇
Day 12 - Object-Oriented Programming - part 3 物件導向程式設計(三)
下一篇
Day 14 - Ruby on Rails 簡介
系列文
Zero to Ruby on Rails30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言