こんにちは、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入門】クラスメソッドとインスタンスメソッドの使い方まとめ | 初心者向け完全無料プログラミング入門
最後に
備忘録がわりに作ったので、間違っている所とかあったら、コメントくれると嬉しいです。