【Ruby】メソッド種類 クラスメソッドとインスタンスメソッドの使い方

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

  • クラスメソッドは、クラスから実行できる。(=クラスから直接呼び出すことができる。)
  • インスタンスメソッドは、インスタンスから実行できる。(=クラスからインスタンスを生成しないと呼び出すことができない。)

[クラス]-->{クラスメソッド}
[クラス]-->[インスタンスを生成]-->{インスタンスメソッド}

クラスメソッド

クラスメソッドの特徴

  • メソッドはクラス内でdef self.メソッド名 ~ endで定義できる。
  • クラス名.メソッド名で呼び出せる。

例1)

Class User
  def self.hello
    p "こんにちは"
  end
end

User.hello

例1の実行結果)

"こんにちは"

例2)

class User
  class << self
    def hello1
      p "こんにちは1"
    end

    def hello2
      p "こんにちは2"
    end
  end
end

User.hello1
User.hello2

例2の実行結果)

"こんにちは1"
"こんにちは2"

クラスメソッドの用途

クラスメソッドはクラス全体に関わる情報を変更したり参照したりするメソッドを作成したいときに使うと便利。
例えば「User」クラスを作成した場合を例にするなら、ユーザ一覧やユーザ全体で共有しているステータスを更新するメソッドを作成する時などに使うと良い。

インスタンスメソッド

インスタンスメソッドの特徴

  • メソッドは、クラス内でdef メソッド名 ~ endで定義できる。
  • インスタンス.メソッド名で呼び出せる。

例1)

class User
  def hello
    p "こんにちは"
  end
end

user = User.new
user.hello

例1の実行結果

"こんにちは"

インスタンスメソッドの用途

user = User.newで「User」クラスからインスタンスを作成し、「user」変数に代入している。user.helloでインスタンスメソッドを呼び出すことができる。
今回定義した「hello」メソッドはインスタンスメソッドなため、User.hello のようにして、クラスから呼び出すことはできない。
インスタンスメソッドは、個別のインスタンスに関わる情報を変更したり参照したりするメソッドを作成するときに使うと便利。
例えば「User」クラスを作成した場合を例にすると、特定のユーザインスタンスのプロフィールを表示したり更新したりするメソッドを作成する時に使うと良い。

まとめ

  • クラスメソッドは クラス全体に関わる情報を変更したり 参照したりするメソッドを作成するときに、インスタンスメソッドは 個別のインスタンスに関わる情報を変更したり 参照したりするメソッドを作成するときに使うと便利。

END

Close