Ruby / Rails

[Ruby・Rails]クラスメソッドとインスタンスメソッドの確認

2019年9月14日

こんにちは、Nanayakuです。

今回は、「【Ruby on Rails】RSpecのModel(モデル)テスト書き方サンプル | にょけんのボックス」を参考にRSpecでテストを作成しているときに、クラスメソッドインスタンスメソッドが出てきて、「何の違いがあったかな?」と思ったので、自分の備忘録として2つの違いを解説していきます。

メソッドとは

メソッドとは、オブジェクトの属性・処理を定義したものです。

例えば、オブジェクトに属性を文字列に変更(.to_s)したり、オブジェクト内の情報を検索(.find)したりするもののことです。

 

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

クラスメソッドは、クラスから直接定義できます。

インスタンスメソッドは、クラスからインスタンスを生成してから定義できます。

 

クラスメソッドとは

定義

クラスメソッドは、下記のように定義できます。

class クラス名
  def self.メソッド名
    処理
  end
end

#例
class User
  def self.name
    puts "私の名前は太郎です"
  end
end

 

また、クラスメソッドが複数ある場合は、下記のように「class << self」を追記することで定義できます。

class クラス名
 class << self
    def self.メソッド名
      処理
    end
    def self.メソッド名
      処理
    end
  end
end

#例
class User
  class << self
    def self.name
      puts  "私の名前は太郎です"
    end
    def self.from
      puts "私の出身は日本です"
    end
  end
end

 

呼び出し

クラスメソッドを呼び出す場合は、下記のように実行します。

クラス名.メソッド名

#実行
User.neme
#=> 私の名前は太郎です

User.from
#=> 私の出身は日本です

 

インスタンスメソッド

定義

インスタンスメソッドは、クラスメソッドと似ていますが、self.を書きません。

class クラス名
  def メソッド名
    処理
  end
end

#例
class User
  def name
    puts "私の名前は#{name}です"
  end

  def from
    puts "私の出身は#{from}です"
  end

  def weight
    puts "私の体重は#{weight}kgです"
  end
end

 

呼び出し

インスタンスメソッドは、クラスからインスタンスを生成(newメソッド)することで実行できます。

インスタンス名.メソッド名

#インスタンスの生成
user = User.new(name: "二郎",from: "アメリカ",weight: "50")

#実行
user.name
#=>私の名前は二郎です

user.from
#=>私の出身はアメリカです

user.weight
#=>私の体重は50kgです

参考

userを@userで定義すると、インスタンス変数になります。

 

まとめ

クラスメソッドは、クラスから定義・実行できるメソッドです。

インスタンスメソッドは、インスタンス(クラスから生成)から定義・実行できるメソッドです。

 

参考サイト

【Ruby入門】クラスメソッドとインスタンスメソッドの使い方まとめ | 初心者向け完全無料プログラミング入門

 

最後に

備忘録がわりに作ったので、間違っている所とかあったら、コメントくれると嬉しいです。

 

-Ruby / Rails
-

© 2021 Nanayaku blog Powered by AFFINGER5