imotanの気になる木

21歳、大学4年(未就活)の意識高い系の大学生の日記的ブロクです。

moduleとは?

メソッドを格納できるものです、メソッドを入れるための箱的なニュアンスで考えてください

module Number
  def plus(num1, num2)
    num1 + num2
  end
end
module モジュール名
 メソッド
end

moduleの特徴

多重承継

多重承継をするため、rubyは単一承継と呼ばれるクラスを一つしか承継できない仕様になっています。そこでclassを合わせて、モジュールを使用するすることで、擬似的に多重継承を行っているようにコードを書くことができます

処理の種類ごとに分離することができる

例えば「name」メソッドを同じプログラムで二つ用意したくなったとします。 普通に書くと、同じメソッド名のメソッドは定義できません。 しかし以下のようにモジュールで名前空間を分けることで、二つのnameメソッドを定義することができます。

module Dog
  def name
    #Dog用のname処理
  end
end

module Cat
  def name
    #Cat用のname処理
  end
end

moduleを使う

module TestModule
  def Min(x, y)
    if x < y
      return x
    else
      return y
    end
  end
 
  def Max(x, y)
    if x > y
      return x
    else
      return y
    end
  end
 
  module_function :Min
  module_function :Max
end
 
puts TestModule.Min(1, 5)
puts TestModule.Max(1, 5)

モジュール内のメソッドを実行するには、

「module_function :メソッド名」

のように、module_functionでmodule_functionメソッドを使い、メソッドをモジュール関数にすることで呼び出すことができるようになります。

また、モジュールを実行するには「TestModule.Min(1, 5)」のように、

「モジュール名.メソッド名」

と指定する必要があります。