💭

module(モジュール)って何?

2023/08/17に公開

モジュールの使い方や役割について、わからなかったのでまとめてみました。
ちゃんと調べていくと奥が深そうなので、まずは簡単に触りだけサラッと理解することにします(^◇^;)

「moduleとは」と検索すると

(建築物で)基準となる大きさ
(コンピューター装置などの)構成要素の単位
(工業製品で)規格化された交換可能な部品

のような訳がでてきます。

何かを構成する時の一塊の部品みたいなイメージのようです。

プロを目指す人のためのRuby入門を読んでみると以下のような感じで書いてあります。

[モジュールを使ってできること]

  • クラスと同じようにモジュール内に関数の定義ができる
  • プログラム上でのある役割をひとまとめにすることができる

[基本的な使い方]

module モジュール名
# モジュールの定義(メソッドや定数など)
end

[便利な使い方](この部分はきちんと理解できていません。。。)

  • クラスにインスタンスメソッドを追加する、もしくは上書きする(ミックスイン)
  • 複数のクラスに対して共通の特異メソッド(クラスメソッド)を追加する
  • クラス名や定数名の衝突を防ぐために名前空間を作る
  • 関数的メソッドを定義する
  • シングルトンオブジェクトのように扱って設定値などを保持する

[クラスとの違い]

  • モジュールからインスタンスを作成することはできない
  • ほかのモジュールやクラスを継承することはできない

それならクラスをつかえばよいのでは??と思っって読み進めていくと・・・

1つのクラスは1つのスーパークラスしか持てないが、複数のクラスにまたがって同じような機能が必要になるケースが存在する
継承は使えないが共通の機能は持たせたいときにモジュールが使える

なるほど〜〜🧐

  • モジュールにメソッドを定義し、クラスでそのモジュールをincludeすると、モジュールで定義したメソッドがインスタンスメソッドとして呼び出せる
  • モジュールをincludeすることで、モジュールに定義したメソッドを継承関係を気にすることなく複数のクラスで呼び出すことができる

ということで、大きなプログラムを作成するときにはとても便利な機能のようです。

ちなみに、モジュールをクラスにincludeして機能を追加することをミックスインというそうです。

ミックスイン先のクラスは基本的にどんなクラスでもOK
1つのクラスに複数のモジュールをミックスインすることもできる
ミックスインを利用することで多重継承に似たしくみを実現できる

などと書いてありますがいまいちピンときていないので、実際の使い方などについては追って学習していきたいと思います😅

他の方が動画で紹介されていたモジュールとコンポーネント、ライブラリの違い
とてもわかりやすく、参考になりましたm(_ _)m

モジュール コンポーネント ライブラリ
内部のプログラム部品 内部のプログラム部品 外部提供のプログラム部品
モジュール単体でも動作する (基本)単体では動作しない よく使う機能が複数入っている

Discussion