--- Title: 【Ruby】メソッド種類 クラスメソッドとインスタンスメソッドの使い方 Author: michiru Web: 'https://mimemo.io/m/daJjOoY3Mp4EyDM' --- # クラスメソッドとインスタンスメソッドの違い * クラスメソッドは、クラスから実行できる。(=クラスから直接呼び出すことができる。) * インスタンスメソッドは、インスタンスから実行できる。(=クラスからインスタンスを生成しないと呼び出すことができない。) [クラス]-->{クラスメソッド} [クラス]-->[インスタンスを生成]-->{インスタンスメソッド} # クラスメソッド ## クラスメソッドの特徴 * メソッドはクラス内で`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」クラスを作成した場合を例にすると、特定のユーザインスタンスのプロフィールを表示したり更新したりするメソッドを作成する時に使うと良い。 # まとめ * クラスメソッドは クラス全体に関わる情報を変更したり 参照したりするメソッドを作成するときに、インスタンスメソッドは 個別のインスタンスに関わる情報を変更したり 参照したりするメソッドを作成するときに使うと便利。