クラスメソッドとインスタンスメソッドの違いについて、曖昧な理解だったため、今回改めて勉強しました。
クラスメソッドの特徴
- クラス内で def self.メソッド名 〜 end で定義する
- クラスから直接データを呼び出すことができる
- あるモデルクラス全体に対し、情報を変更したり、参照したりするメソッドを作成するときに使うと便利
- 例えば「User」クラスを作成した場合を例にするなら、ユーザー一覧の表示や、ユーザー全体で共有して使うステータスを更新するメソッドを作成するときに使うと良い。
def self.method_name での書き方
class Hoge
def self.hoge
puts "hoge"
end
end
Hoge.hoge # => hoge
# selfはHogeでもOK
class << self 内でクラスメソッドを定義する書き方
class Hoge
class << self
def hoge
puts "hoge"
end
end
end
Hoge.hoge # => hoge
# selfはHogeでもOK
インスタンスメソッドの特徴
- クラスからインスタンスを生成しないと呼び出すことができない
- あるモデルクラスがあった時、そのモデルから個別のインスタンスに関わる情報を変更したり、参照したりするメソッドを作成するときに使うと便利
- 例えば「User」クラスを作成した場合を例にするなら、特定のユーザーインスタンスのプロフィールを表示したり更新したりするメソッドを作成するときに使うと良い
インスタンスメソッドの書き方
class Hoge
def hoge
puts "hoge"
end
end
Hoge.new.hoge # => hoge
両者の違い
- クラスメソッドはクラス自身に関する情報の変更や参照の役割をもっているのに対して、インスタンスメソッドは個別のインスタンスに関する情報の変更や参照の役割りを持っている。
クラスメソッドとインスタンスメソッド、どちらを使うべきか迷ったら
- 迷ったときは「とりあえずインスタンスメソッド」を使うべし。