0
0

More than 3 years have passed since last update.

インスタンスメソッドとクラスメソッド

Posted at

はじめに

Railsチュートリアルを進める中で、少しわかりにくかったのでまとめてみることにしました。

違い

インスタンスメソッド
レシーバがあるメソッド
(レシーバとは.の前に書かれたメソッドを呼び出すオブジェクト)

user.name
[1.2.3].length

クラスメソッド
レシーバがクラスであるメソッド

User.new

newがクラスメソッド
上記の例では、Userクラスのオブジェクトを作成

クラスメソッドの定義方法

Railsチュートリアル9章でも出てきますが、selfを使って2種類の方法で定義することができます。

①メソッド名の前にselfを記述する

class User < ApplicationRecord
・
・
  def self.new_token
    SecureRandom.urlsafe_base64
  end

self=Userとなる

②class << self
複数のクラスメソッドを書く際は、こっちの方が便利。

class User < ApplicationRecord
  .
  .
    def new_token
      SecureRandom.urlsafe_base64
    end

class << selfを記述しておくことで、それぞれのクラスメソッドにはselfはいらない。

ちなみに

def User.new_token

と、クラス名をそのまま記述する方法でも良いが、クラス名が変わった際に大変。

まとめ

名前 定義方法 呼び出し
インスタンスメソッド def メソッド名 インスタンス.メソッド
クラスメソッド def self.メソッド名 クラス.メソッド
0
0
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
0
0