Rubyモジュールについて

モジュールとは

クラスは実体(データ)と振る舞い(メソッド)を持ちますが、モジュールは振る舞いのみを持ったものといえます。

クラスとの差異としては、以下の点が挙げられます。

・モジュールはインスタンスを持つことができない

・モジュールを継承できない。


モジュールによる名前空間の明示化

メソッド名や変数名が衝突しないように明示化することができます。

メソッドの利用に際しては、「モジュール名.メソッド名」という形式で記述します。


モジュールの作成

モジュール名の先頭文字は大文字である必要があります。


module SampleModule
  Definition = "3.0"
  def function(var)
    # process
  end
  module_function :function
end

定数

モジュールに定義した定数はモジュール名を経由して参照できます。


print Sample::Definition

メソッド定義

メソッドをモジュール関数として外部公開するためには、「module_function」というシンボルを使用する必要があります。


Mix-in

Mix-inとは

Rubyではモジュールをクラスに混ぜることができ、これをMix-inと呼びます。
簡単にいえば、クラスに機能を混ぜ合わせることで複数のクラスで機能を共有する機能となります。 / クラス定義内で「include」を記述して、モジュールのメソッドや定数をクラスに取り込みます。


module SampleModule
  #処理
end

class SampleClass1
  include SampleModule
end

class SampleClass2
  include SampleModule
end

Mix-inと継承の違い

継承とは、基底クラスの機能を受け継ぎ、必要に応じて、振る舞いや機能を変更することで、より具体的なクラスを定義することです。
これに対して、Mix-inは「既にある機能を、親子関係にない複数のクラスで共通に利用する」ものです。

Mix-inのメリット

・Rubyで多重継承を実現できる。(Rubyの継承は単一継承です。)
・繰り返し記載する内容を、効率的に書くことができる。変更に強い記載ができる。


関連ページ