背景
Rubyを使用していて、インスタンスメソッドとクラスメソッドの知識が曖昧だったのでまとめました。
インスタンスメソッドとクラスメソッド
インスタンスメソッド
インスタンスオブジェクトから実行できるメソッド。
クラスメソッド
クラスオブジェクトから実行できるメソッド。
使用例
Person.rb
class Person
def initialize(name)
@name = name
end
# インスタンスメソッド
def instance_method
p @name
end
# クラスメソッド
def self.class_method(filename)
path = File.join(File.dirname(__FILE__), filename)
name = File.read.split("\n").map($:strip)[0]
Person.new(name)
end
end
インスタンスメソッドを使用する場合
p = Person.new("test")
p.instance_method
-> "test"
クラスメソッドを使用する場合
p = Person.class_method("name.txt")
p.instance_method
-> "test"
結局どう使い分ける?
基本的には、インスタンスメソッドで処理を実現できるか検討する。
外部からデータを取得する処理(外部ファイルからデータを取得し、インスタンスを作成する時など)は、クラスメソッドを使用する。