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

-2018.01.14 -Ruby・Rails
-

自分用の備忘録的に。大枠で理解したことを言語化してみました。

もともと9月ごろにTechAcademyのオンラインブートキャンプ Webアプリケーションコース
をとおしてRuby・Ruby on Railsを学びました。

TechAcademy自体はとてもおすすめなのですが、
久しぶりに学習し直してみたら忘れていることがありましたので、
クラスメソッドとインスタンスメソッドについて整理してみました。

スポンサーリンク

前提(ざっくり)

  • オブジェクト:変数とメソッドで構成される
  • オブジェクト:クラスとインスタンスに大別される
  • クラス:オブジェクトの設計図
  • インスタンス:オブジェクトの実体
  • Ruby はクラスベースのオブジェクト指向言語

サンプルプログラム

# test.rb
class Post
  def initialize(name)
    @name = name
  end

  # インスタンスメソッド
  def instance_method
    puts @name
  end

  # クラスメソッド
  def self.class_method(filename)
    path = File.join(File.dirname(__FILE__), filename)
    name = File.read(path).split("\n", 2).map(&:strip)
    Post.new(name)
  end
end
# test.txt(test.rbと同階層)
クラスメソッド

インスタンスメソッド

# インスタンスメソッドを使用する場合
post = Post.new("インスタンスメソッド")
post.instance_method
-> インスタンスメソッド

「インスタンスメソッド」というデータを
@name というインスタンス変数でクラス Post に渡して
生成したインスタンス post からインスタンスメソッド instance_method
を呼び出して「インスタンスメソッド」を出力しました。

クラスメソッド

# クラスメソッドを使用する場合
p = Post.class_method("test.txt")
p.instance_method
-> クラスメソッド

同階層にある test.txt の「クラスメソッド」というデータを
クラスメソッド class_methodで取り出してクラス Post が受け取り
インスタンスメソッド instance_methodで「クラスメソッド」を出力しました。

思ったこと

  • 基本的にはインスタンスメソッドを使う
  • 外部(DBや別ファイルなど)からデータを利用する場合は、クラスメソッドを使う

理解が違っていたらマサカリお願いします!
facebookアカウント
お問い合わせフォーム

          
    

スポンサーリンク

  
Scroll Up