Rubyのモジュールによるミックスインの3つの方法


こんにちは。Tomoyuki(@tomoyuki65)です。

Rubyのモジュールはミックスインで使用しますよね。

ミックスインの方法としては3つ覚えておくと良いでしょう。

この記事では、ミックスインについて解説します。

 



ミックスインの3つの方法とは?

Rubyのモジュールのミックスインでは、以下の3つの方法があります。

  •  includeでミックスイン
  •  extendでミックスイン
  •  prependでミックスイン

 

includeでミックスイン

モジュールをインスタンスメソッドとしてミックスインしたい場合は、includeを使います。

例として、以下のプログラムを実行してみて下さい。

# モジュールを定義
module Say_en
  def hello_en
    puts "Hello"
  end
end

# クラスを定義
class Say
  # モジュールをミックスイン
  include Say_en

  def hello_jp
    puts "こんにちは"
  end
end

greeting = Say.new

# インスタンスメソッドを実行
greeting.hello_jp
greeting.hello_en

 

実行結果
こんにちは
Hello

 

extendでミックスイン

モジュールをクラスメソッドとしてミックスインしたい場合は、extendを使います。

例として、以下のプログラムを実行してみて下さい。

# モジュールを定義
module Say_en
  def hello_en
    puts "Hello"
  end
end

# クラスを定義
class Say
  # モジュールをミックスイン
  extend Say_en

  def hello_jp
    puts "こんにちは"
  end
end

# クラスメソッドを実行
Say.hello_en

 

実行結果
Hello

 



prepend

モジュールをインスタンスメソッドとしてミックスインする場合は、includeを使うのが一般的ですが、Ruby 2.0からはprependでミックスインすることもできます。

prependでミックスインした場合は、同名のメソッドがあった場合にミックスインしたクラスよりも先にモジュールのメソッドが呼ばれるため、既存メソッドの置き換えることができます。

例として、以下のプログラムを実行してみて下さい。

# モジュールを定義
module Say_en
  def hello_en
    puts "Hello"
  end

  def hello_jp
    puts "Hello"
  end
end

# クラスを定義
class Say
  # モジュールをミックスイン
  prepend Say_en

  def hello_jp
    puts "こんにちは"
  end
end

greeting = Say.new

# インスタンスメソッドを実行
greeting.hello_jp
greeting.hello_en

 

実行結果
Hello
Hello

 

実行結果の通り、prependを使用することで既存メソッドの置き換えを簡単にすることができます。

例えばモンキーパッチ(自分が期待する挙動に変更すること)をあてる際に、以前は既存のメソッドを上書きにはエイリアスメソッド使用していましたが、prependを使用することで簡単にできるようになりました。

尚、includeした場合はクラス側のメソッドの置き換えはできませんが、クラス側でモジュールのメソッドを置き換える(上書きする)ことはできます。

 

まとめ

  •  インスタンスメソッドとしてミックスインする場合は、includeを使う(クラス側でモジュールのメソッドを上書き可能)
  •  クラスメソッドとしてミックスインする場合は、extendを使う
  •  includeの代わりにprependでミックスインすると、既存メソッドの置き換えが簡単にできる

 

  • 関連記事

【無料あり】Ruby入門サイトおすすめ3選!初心者向けの学習方法を解説

2017年10月24日

 

The following two tabs change content below.
Tomoyuki

Tomoyuki

元SE。30歳を目前に仕事や将来に悩み、Web業界へ転職を目指すも失敗。 「好きなことで生きる」に憧れてなんのあてもなく仕事を辞め、ガチ初心者からブロガーに挑戦し、月間4.9万PV(上昇中)を達成! ブログでは大好きなパソコン情報をはじめ、様々な役立つ情報を発信中。 そして次はプロゲーマーとしても活動するため、ゲーム練習と合わせて攻略記事を書いたり、YouTubeでも活動中。








シェアはこちらから


資産運用始めなくて大丈夫ですか?

日本ではお金の教育が一切無いので、資産運用している人はまだ少ないです。

資産運用で結果を出すには膨大な時間が必要で、早く始めないと損なんです。

ウェルスナビなら誰でも簡単に資産運用が始められるので、一度検討してみてはいかがでしょうか。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です