LoginSignup
0
0

More than 1 year has passed since last update.

[Ruby]モジュールについて

Last updated at Posted at 2021-10-06

はじめに

本記事では、モジュールについて記述します。

モジュールとは

モジュールは、機能を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した場合

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】 メソッド探索から見る、モジュール・特異メソッド・特異クラス

明日も頑張ります!

0
0
0

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