LoginSignup
0
0

More than 5 years have passed since last update.

モジュールとミックスインについて簡単な備忘録

Last updated at Posted at 2018-11-02

モジュールとは

複数の処理を書く際に共通の処理をまとめておく時に使われるもの。
使い方としては、後に説明するミックスインの機能を使って、複数のクラスで定義する
共通の複数の処理をモジュールを定義しまとめることによって、いちいち処理を定義し、コードを
書かずとも呼び出すだけで良くなるというメリットや、コード量が少なくなり、見やすくなるなどの
メリットがある。

モジュールを定義するときは、下記のような書き方から始まる。


module SampleModule

end

このようにmodule モジュール名から始まり、classを定義する際や、メソッドを定義する際と同じよう
にendで終わる。

moduleの中には、上記のようにいつでも呼び出せたらいいような、処理をまとめておく。
これにより、コードも見やすくなり整理されていい感じである。

次に、処理を定義したmoduleの呼び出し方について見ていく。

モジュール内で定義したメソッドを関数として呼び出す方法。


module SampleModule
 def sum(a,b)
   a + b
 end
 module_function:sum
end

puts SampleModule.sum(1,1) => 2

上記のようにfunction_moduleメソッドでモジュール内で定義したメソッドをシンボルで指定する事で
関数として呼び出す事ができる。

module内で定義した定数を呼び出す方法

module SampleModule 
 CONST_NUM = 100
def sum(a,b)
 a + b
 end
end

puts SampleModule::CONST_NUM => 100

上記のようにモジュール名にコロンを二つで指定する事ができる。

includeを使ったmodule定義したメソッドを呼び出す方法

module SampleModule 
 CONST_NUM = 100
 def const_num
  CONST_NUM
 end
end

include SampleModule

puts CONST_NUM
puts const_num

モジュールを定義後、includeメソッドを呼び出すことで、その下から、直接、
moduleで定義したメソッドや、定数を呼び出す事ができる。

ミックスインについて

ミックスインとはクラスにモジュールを読み込ませることである。下記のsample codeで説明する。

module SampleModule
 def sum(a,b)
  a + b
 end
end

class Sample
 include SampleModule
 def call_sum(a,b)
  sum(a,b)
 end
end

sample = Sample.new
sample.sum(1,1) => 2
sample.call_sum(2,2) => 4

上記では、sumという複数のクラスで使うと仮定したメソッドを定義している。その定義した処理を
クラスにincludeメソッドで読み込むことによって、見やすく、手間を省く事ができている。
また、ModuleSampleで定義したメソッドもSampleクラスでincludeすることにより、
sampleクラスのオブジェクトをレシーバーに、関数として、sumメソッドを呼び出す事ができている。

他のクラスでまた、moduleで定義したメソッドを呼び出す場合は、同じようにincludeを使うと良い。

まとめ

複数のクラスで使いそうなメソッドは、モジュールを定義し、まとめておき、いつでも呼び出せるようにしておく。
また、クラス定義ではなく、普通に何度も使いそうなメソッドも、module_function :メソッド名で定義する事でコードを書く手間が省けて良い。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0