2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

モジュールとは

Last updated at Posted at 2023-04-18

はじめに

今回はオブジェクト指向でプログラミングを考える上でも大切になってくるモジュールについてまとめていきたいと思います。
初学者ゆえに解釈違いな部分などもあるかもしれないですが、何卒よろしくお願いいたします!

モジュールとは何か

モジュールを使うと、メソッドを共同利用できます。また、クラスにてモジュールをインクルードすることで、モジュールに定義したメソッドをあたかもクラス自身に定義されたメソッドとして使えるようにします。

クラスとの違いは何か

モジュールとクラスの違いは以下の2点が挙げられます。
インスタンスが生成でき、モジュールはインスタンスが生成できない
クラスは継承でき、モジュールは継承できない

モジュールを使うメリットは何か

メリットとしては、モジュールをクラスに組み込むことで、クラス定義にメソッドをコピー&ペーストしたのと同じようにモジュールのメソッドをクラスで利用できるようになることです。
これは、特定のクラスで再利用したいメソッドがあり、それを一カ所に集めておきたい場面で非常に便利です。
複数のクラスでメソッドを共同利用するには次の3つの手順を行います。

  1. モジュールを作る
  2. モジュールにメソッドを定義する。
  3. モジュールのメソッドをクラスで使う。

ホイップクリームのトッピングを例として考えていきます。
このような場面でモジュールを使うと、ドリンクでもケーキでもトッピングできる部品を作る事ができます。ホイップクリームをトッピングするメソッドを作り、メソッドを共同利用してみます。
それでは書いていきましょう。

1. モジュールを作る

まず初めにモジュールを作ります。ホイップクリームをトッピングするWhippedCreamという名前のモジュールにします。

module.rb
module WhippedCream
end
ruby module.rb
(何も表示されません。)
モジュールの定義
module モジュール名
end

2. モジュールにメソッドを定義する

次にモジュールにメソッドを定義します。モジュールはクラスと同じようにメソッドを定義できます。引数や戻り値も同じように可能です。
WhippedCreamモジュールにインスタンスメソッドを定義してみましょう。
ここでは、ホイップクリームをトッピングるすことを想定したwhipped_creamメソッドを定義します。

module.rb
module WhippedCream
    def whipped_cream
        @name += "ホイップクリーム"
    end
end
ruby module.rb
(何も表示されません。)

module.rbを実行しても何も表示されないのは定義された上げではメソッドは実行されないからです。ここはクラスとの類似点ですね。

3. モジュールのメソッドをクラスで使う

それではモジュールを使用する側であるDrinkクラスを実装します。

module.rb
class Drink
    def initialize(name)
        @name = name
    end
    def name
        @name
    end
end

drink = Drink.new("モカ")
puts drink.name
ruby module.rb
モカ

このDrinkクラスにて、WhippedCreamモジュールのwhipped_creamメソッドが使用でき、@nameの末尾に"ホイップクリーム"を加えるのがゴールです。
モジュールのメソッドをクラス使用できるようにするには、includeメソッドが必要です。

inculeメソッド
class クラス名
    include モジュール名
end
module.rb
module WhippedCream
    def whipped_cream
        @name += "ホイップクリーム"
    end
end

class Drink
    include WhippedCream
    def initialize(name)
        @name = name
    end
    def name
        @name
    end
end

drink = Drink.new("モカ")
drink.whipped_cream
puts drink.name
ruby module.rb
モカホイップクリーム

include WhippedCreamを実行すると、DrinkクラスのオブジェクトはモジュールWhippedCreamのメソッドであるwhipped_creamが利用できるようになります。
そのためdrinkオブジェクトの@nameを表示すると、その前の行で追加されたwhipped_creamメソッドが実行されるので、@nameは末尾にトッピングが追加された"モカホイップクリーム"となっています。

まとめ

最後に@nameの動きとこのプログラムの流れをもう一度整理しましょう。

  1. Drink.rewメソッドの引数で"モカ"が渡され@nameに代入される。
  2. ここで作られたDrinkクラスのオブジェクトは変数drinkに代入される。
  3. 次の行でdrinkオブジェクトのwhipped_creamメソッドが呼び出され、@nameの末尾に"ホイップクリーム"が追加されます。
  4. @nameを取得すると、"モカホイップクリーム"となっています。

最後に

結構Rubyの基礎学んでる時はスラスラ覚えられて楽しかったんですが、どうしてもクラスとかモジュールとか継承とか...etcの話になってくると、初学者にとって途端に難しくなるのでその点も踏まえて今回復習がてら書かせていただきました!
やはり記事に起こすことでササっと見直せますし、何がわかってなかったかが明確にされていいですね✨
今後もアウトプット中心の学習を心がけていきたいと思うのでどうぞ応援よろしくお願いいたします🙇

引用文献

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?