13
5

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 3 years have passed since last update.

【Ruby】includeとextendの違い。クラスメソッドとインスタンスメソッドの違いと実例。

Posted at

【Ruby】includeとextendの違い。クラスメソッドとインスタンスメソッドの違いと実例。

##目次

  1. includeとextendとは?
  2. includeとextendの違い
  3. クラスメソッドとインスタンスメソッドの違い
  4. クラスメソッドとインスタンスメソッドの使い分け
  5. includeとextendの実例

##includeとextendとは? どちらも、クラスの中でモジュールを呼び出すときに使う(mixin ミクシン)。

モジュールとmixinとは?

##includeとextendの違い
読み込んだモジュールのメソッドを、インスタンスメソッドかクラスメソッドのどちらで読み込むかの違い。

メソッド 意味
include インスタンスメソッドとして読み込む
extend クラスメソッドとして読み込む

##クラスメソッドとインスタンスメソッドの違い

その名の通り、クラスから呼び出せるメソッドか、インスタンスから呼び出せるメソッドかの違い。

メソッド 呼び出し
クラスメソッド <クラス名>.<メソッド名>
インスタンスメソッド <クラス名>.new.<メソッド名>

クラスメソッドは、クラスから直接メソッドを呼び出せる

インスタンスの場合は、クラスから**newを使って、インスタンスを生成して、メソッドを呼び出す**。


###クラスメソッドとインスタンスメソッドの使い分け
メソッド 用途
クラスメソッド 全体で共通
インスタンスメソッド インスタンス毎に固有

####インスタンスメソッド
メソッドの結果が生成したインスタンス毎に固有となるメソッドを定義していく。(例えば、苗字や名前を登録するなど。)

インスタンスメソッド
class <クラス名>
  def <メソッド名>
    処理
  end
end
呼び出し
<クラス名>.new.<メソッド名>

####クラスメソッド DBから指定したデータを抽出する場合など、**どのインスタンスでも同じ答えが返るメソッドに使う**。
  • メソッド名の前にselfがつく
  • メソッドはクラス名の後で直接呼び出せる(インスタンスを生成する必要がない)
インスタンスメソッド
class <クラス名>
  def self.<メソッド名>
    処理
  end
end
呼び出し
<クラス名>.<メソッド名>

##includeとextendの実例

###include
インスタンスメソッドとして読み込む

include
module Aaa
  def hello(name)
    p "こんにちは、#{name}さん"
  end
end


#モジュールの読み込み(mixin)
class Xxx
  include Aaa
end 

#メソッドの実行
Xxx.new.hello("山田")

 => "こんにちは、山田さん"

▼クラスはNG

NG
Xxx.new.hello
NoMethodError (undefined method `hello' for Xxx:Class)

###extend クラスメソッドとして読み込む
extend
module Bbb
  def hello
    p "皆さん、こんにちは"
  end
end


#モジュールの読み込み(mixin)
class Yyy
  extend Bbb
end 

#メソッドの実行
Yyy.hello

 => "皆さん、こんにちは"

▼インスタンスはNG

NG
Yyy.new.hello
NoMethodError (undefined method `hello' for #<Yyy:0x00007f81b2083410>)

以上。
13
5
2

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
13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?