[Ruby] moduleの include extendの違いを解説

Ruby初心者の友達に、moduleに関して基本的なことを教えていて、

その時の備忘録です。

module

「クラスと何が違うのか」とよく聞かれるので、まとめてみると、以下の2つ。

  • インスタンスを生成することはできない
  • 継承することはできない

なるなる。

で、モジュールはどういったときに使うのというと、以下の4つになります。

  • 名前空間を作る
  • モジュールメソッドを、クラスのインスタンスメソッドとして使う
  • モジュールメソッドを、あるオブジェクトの特異メソッド(クラスメソッド)として使う
  • モジュール関数を定義して使う

では、一個一個見ていきましょう。

 

名前空間

名前の衝突を防ぐために、使う。

下の コードのように名前の衝突を防ぎます。

 

include

moduleに定義されているメソッドをクラスのインスタンスメソッドとして取り組むことができる

 

includeは、複数できる。

 

extend

moduleに定義したメソッドをオブジェクトに取り組むことができる。

 

クラスもオブジェクトなので、クラスに取り組むこともできる。
その場合、クラスメソッドとしてmoduleに定義したメソッドを使うことができる

 

module関数

moduleは、関数にすることができる

 

まとめ

実際にコードを書いてみれば、理解しやすいですね。

コメントを残す

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

CAPTCHA