1
0

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 1 year has passed since last update.

【備忘録】【Rails】クラスメソッドとインスタンスメソッドの違い

Last updated at Posted at 2022-11-03

クラスメソッドとインスタンスメソッドの違いについて、曖昧な理解だったため、今回改めて勉強しました。

クラスメソッドの特徴

  • クラス内で 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

両者の違い

  • クラスメソッドはクラス自身に関する情報の変更や参照の役割をもっているのに対して、インスタンスメソッドは個別のインスタンスに関する情報の変更や参照の役割りを持っている。

クラスメソッドとインスタンスメソッド、どちらを使うべきか迷ったら

  • 迷ったときは「とりあえずインスタンスメソッド」を使うべし。

こちらの記事には実例が書かれていて、とてもわかりやすかったです。

その他、参考にさせていただいた記事

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?