ume

Ruby モジュール

  • 対象者

  • Ruby初心者.

この記事を読んでわかること

モジュールとは何か、モジュールの使い方。

目次

  1. モジュールとは.

  2. クラスとモジュールの違い.

  3. モジュールの使用用途.

  4. 名前空間の提供

  5. インスタンスメソッドとして取り込む(Mix-in)

  6. モジュールをオブジェクトに取り込む

モジュールとは.

→メソッドを集めたもの.
それとってクラスじゃないの?と思ったのは私だけでしょうか? モジュール↓

module Salary 
 def calculate_salary
 
 end 

 def kihon
  
 end 

 def teate 

 end 

クラスとほとんど同じやん‥.

class クラス名 

で定義するところが

module モジュール名

に変わっただけやん‥

1. クラスとモジュールの違い.

簡単に比較してみるとクラスの劣化版のような印象を受けました。この時点でモジュールを使う理由がないと感じたのは私だけでしょうか? しかし

1. モジュールの使用用途

  • 名前空間の提供

  • インスタンスメソッドとして取り込む(Mix-in)

  • クラスメソッドとして取り込む

  • モジュールをオブジェクトに取り込む

1. 名前空間の提供

名前空間の提供とは? ⇨同じ名前のメソッドやクラス名を使えるようにする機能.

module Person
  class Student
    def self.say
      puts "I'm Ken."
    end
  end
end
 
class Student
  def self.say
    puts "私はケンです"
  end
end
 
Person::Student.say
#=> "I’m Ken."
 
Student.say
#=> 私はケンです

module モジュール名でクラスを入れ子構造にすることで下のStudentクラスとは別のメソッドだと表現している。

1. インスタンスメソッドとして取り込む(Mix-in)

→モジュール内で定義したメソッドをクラスの中にインスタンスメソッドとして取り入れることができる=Studentクラスでgreetメソッドが使用できる クラス内で

include モジュール名

と定義すれば使えるようになる.
↓こんな風にインスタンスメソッドとして使用できる。

student = Student.new

student.greet
→puts ”こんにちは”と出力される

モジュールをオブジェクトに取り込む

特異メソッドとして取り込むこともできます。

class Greet
  def say
    puts "Hello"
  end
end 
obj = Greet.new
obj2 = Greet.new

#↓特異メソッドという。オブジェクト.メソッド名で定義する
def obj.hi  
  puts "よろしく"
end 
 

puts obj.hi ⇨よろしく
puts obj2.hi⇨エラー