今回はRubyのモジュール(module)について解説していきたいと思います!
モジュールは他の言語にないことも多く、少し特殊な概念になります。
そのため、モジュールを学ぶことは他言語経験者でも少し難しいものになります。
そこで今回は、そんなモジュールを体系的に学ぶために
【基礎】モジュールを使用する理由
【基礎】モジュールの使い方
【発展】モジュールとクラスの違い
という章に分けて解説していきたいと思います!
それでは行ってみましょう!
モジュールとは
モジュール(module)を一言で表すと「メソッドを格納できるもの」です。
難しく考えずに「メソッドを入れるための箱なんだな」という意識で大丈夫です。
モジュールの書き方:
module Number def plus(num1, num2) num1 + num2 end end
モジュールは 「module」から「end」を一つの塊として定義できます。
moduleの後にはモジュール名を与えます。
モジュールの定義方法がわかったところで、なぜモジュールを使用するのか解説していきます。
少し難しい話も入るので、「とりあえずモジュールの使い方が知りたい!」という人は飛ばして行っちゃてください。
単一継承
Rubyは単一継承と呼ばれる言語設計になっています。
要はクラスを一つしか継承できないという設計です。
そのため、クラスと合わせて、モジュールを使用するすることで、擬似的に多重継承を行っているようにコードを書くことができます。
処理の種類ごとに分離することができる
例えば「name」メソッドを同じプログラムで二つ用意したくなったとします。
普通に書くと、同じメソッド名のメソッドは定義できません。
しかし以下のようにモジュールで名前空間を分けることで、二つのnameメソッドを定義することができます。
module Dog def name #Dog用のname処理 end end module Cat def name #Cat用のname処理 end end
モジュールを使用する
それでは実際にモジュールを使用していきましょう!
サンプルプログラム:
module Test puts "Test" end
前述したようにモジュールの始まりである「module」からモジュールの終わりの「end」の中に処理を記述すればOKです!
また、より具体的な使い方についても見ていきましょう。
モジュール名を指定して実行するには、以下のように記述します。
サンプルプログラム:
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)
実行結果:
1 5
このサンプルではモジュールの中に最小値と最大値を求めるメソッドを定義しています。
モジュール内のメソッドを実行するには、
「module_function :メソッド名」
のように、module_functionでモジュール名を指定する必要があります。
また、モジュールを実行するには「estModule.Min(1, 5)」のように、
「モジュール名.メソッド名」
と指定する必要があります。
モジュールとクラスの違い
モジュールとクラスはよく混同してしまいがちですが、明確な違いがあります。
モジュールとクラスについての詳細な解説については以下の記事で詳しく解説しています!
まとめ
ここでは、Rubyのモジュールについて、
- モジュールとは
- モジュールを使用する理由
- モジュールの使い方
- モジュールとクラスの違い
について解説しました。
モジュールはRubyでコードをきれいに書くためや、スマートなクラスを設計するために必須となる知識です。
しっかりと覚えておくようにしましょう。