モジュールとミックスインについて
本記事はモジュール・ミックスインについてまとめていきます。
モジュール
…特定のメソッドをまとめておけるもの。
複数のクラスで使用する共通のメソッドをモジュールとして定義できる。モジュール内に書いたメソッドや定数は様々な箇所で使用できる
example_1.rb
module TestModule
CONST_NUM = 100
def const_num
CONST_NUM
end
end
# モジュールへのアクセス方法1
puts TestModule::CONST_NUM
=>100
# モジュールへのアクセス方法2
# include <モジュール名>を記述することで、モジュールに定義されたメソッドを関数のように呼び出すことができる
include TestModule
# モジュールをincludeした後であれば、モジュール名を省略して定数に直接アクセスすることができる
puts const_num
=>100
puts CONST_NUM
=>100
単純にモジュールに書いたメソッドに対して直接メソッドを呼び出すことはできない。
しかし、モジュールファンクションとして定義することで
クラスメソッドのようにモジュールのメソッドを呼び出すことができる。
example_1.rb
module TestModule
def module_function_sum(a, b)
a + b
end
module_function :module_function
end
puts TestModule.module_function_sum(3,3)
=> 6
ミックスイン
…モジュールの機能をクラスに取り込むことができる。
複数のクラスで使う共通のメソッドをモジュールとして定義しておき、適宜includeして使用したり、特定のメソッドをモジュールとしてまとめておいてユーティリティとして使用するなどの使い方がある。
ユーティリティ
…多目的や汎用性が高いもののこと。
example_2.rb
module TestModule
def sum(a, b)
a + b
end
end
class Test
# include <モジュール名>を記述することで、モジュールに定義されたメソッドを呼び出すことができる。
include TestModule
def call_sum(a, b)
sum(a, b)
end
end
test = Test.new
puts test.sum(1,1)
=> 2
puts test.call_sum(2,2)
=>4