モジュールとは定数やメソッドを定義できるものです。
モジュール内で定義した定数やメソッドは色々な箇所で使用することができます。
モジュールの定義
モジュールは以下のように定義できます。
「module」と記載後にモジュール名を記載し、「end」の中に定数を定義したり、メソッドを記載したりします。
定数にアクセスする方法はいくつかあります。
モジュール内では
- モジュール内では定数名を記載して、直接アクセス
モジュール外では
- 「モジュール名::定数名」
- 「include モジュール名」でインクルードした後、
module SampleModule
CONST_HUNDRED = 100
def const_hundred
#モジュール内で定数を参照する場合は、定数名を記載するだけ
CONST_HUNDRED
end
end
#「モジュール名::定数名」
puts SampleModule::CONST_HUNDRED
#実行結果
->100
#「include モジュール名」でインクルードした後,定数名で直接アクセス
include SampleModule
puts const_hundred
puts CONST_HUNDRED
#実行結果
->100
100
module_functionの定義
moduleに記載したメソッドは単純に呼び出すことはできませんが、module_functionとして定義することで直接呼び出すこともできます。
module_functionは「module_function :{モジュールファンクション名(※定義したいメソッド名)}」で定義し、「{モジュール名}.{モジュールファンクション名}」で呼び出すことができます。
以下の例では、「module_function_sum」というメソッドを「module_function」として定義しているので、「SampleModule.module_function_sum」に(1, 2)という引数を渡して呼び出しています。
module SampleModule
def module_function_sum(a, b)
a + b
end
#module_functionの定義
module_function :module_function_sum
end
#module_functionの呼び出し
puts SampleModule.module_function_sum(1, 2)
Mixin(クラスにモジュールを取り込む)
クラス内にモジュールの機能を取り込むにはクラス内でインクルードすることでインスタンス化した際に、モジュールのメソッドを呼び出すことができます。
module SampleModule
def sum(a, b)
a + b
end
end
class Sample
#クラス内でSampleModuleをインクルードして、
#インスタンス化されたオブジェクトでモジュールに定義されたメソッドを呼び出すことができる。
include SampleModule
def call_sum(a, b)
#クラス内でモジュールのメソッドを呼び出す
sum(a, b)
end
end
sample = Sample.new
#インスタンス化してモジュール内のメソッドを呼び出す。
puts sample.sum(1, 2)
->3
#クラス内のモジュールを呼び出す。
puts sample.call_sum(3, 4)
まとめ
このようにモジュールには様々な呼び出し方があります。
複数のクラスで使用するメソッドをモジュールとして定義しておき、必要な際にインクルードして使用したり、特定のメソッドをモジュールにまとめておき、ユーティリティとして使用するなどがよく使われる使い方になります。
コードをきれいにまとめるために使用されるので、理解しておきましょう。
コメント