はじめに
本記事では、モジュール
について記述します。
モジュールとは
モジュールは、機能
を1つずつ分けて他のファイルから読み込める
ようにした処理のまとまり
のことです。
module A
def A_method
"A_method"
end
end
class B
include A
def B_method
@B = 2
end
end
object = B.new
object.A_method
moduleAをclassBにincludeすると、
moduleAに含まれているメソッドをclassBのインスタンスが使えるようになります。
「流れ」
object
↓クラスへの参照
クラスB
↓include
モジュールA
というような探索の流れになります。
クラスが複数のモジュールをincludeした場合
```ruby
module A
def A_method
"A_method"
end
end
module B
def B_method
"B_method"
end
end
class C
include A
include B
def C_method
@C = 3
end
end
object = C.new
object.A_method
「流れ」
object
↓クラスへの参照
クラスC
↓include
モジュールB
↓include
モジュールA
というような探索の流れになります。
探索の順番として、最後にincludeしたモジュール(ここではB)から探索します。
prepend
prepend = 「追加する」 by Google先生
追加する
という形なので、
includeとはまた違う探索の流れになります。
module A
def A_method
"A_method"
end
end
class B
prepend A
def B_method
@B = 2
end
end
object = B.new
object.A_method
「流れ」
object
↓クラスへの参照
モジュールA
↓クラスへの参照
クラスB
↓prepend
モジュールA
というような探索の流れになります。
複数のモジュールをprependする場合。
module A
def A_method
"A_method"
end
end
module B
def B_method
"B_method"
end
end
class C
prepend A
prepend B
def C_method
@C = 3
end
end
object = C.new
object.A_method
「流れ」
object
↓クラスへの参照
モジュールB
↓クラスへの参照
モジュールA
↓クラスへの参照
クラスC
↓prepend
モジュールA
↓prepend
モジュールB
というような探索の流れになります。
prependもincludeと同様に、後にprependしたモジュールBから先に探索される。
以上です。
終わりに
基礎の部分の定着のために、
明日は、基本情報技術者試験のテキストで学習しようと思います。
以下参考サイトです。
Rubyのmoduleの使い方とメリットを理解して脱初心者!
【ruby】 メソッド探索から見る、モジュール・特異メソッド・特異クラス
明日も頑張ります!