結論
個インスタンス毎に異なるデータを持たせたい場合はインスタンスメソッド、全てのインスタンスに共通に持たせたい場合がクラスメソッド(もしこの見分け方で例外ができた場合その時にまた学ぶとする)
給料計算のプログラムの例
前提
全従業員は同じ基本給
ボーナスは人ごとに変わる
class Employee @@base_salary = 50000 # クラス変数で基本給を設定 def initialize(name) @name = name end # インスタンスメソッドで給与計算 def calculate_salary @@base_salary + bonus # ボーナスを加算 end private # インスタンスごとに異なるボーナスを計算するプライベートメソッド def bonus rand(10000) # ランダムにボーナスを生成 end # クラスメソッドで基本給を変更する def self.change_base_salary(new_base_salary) @@base_salary = new_base_salary end end # インスタンスの作成 employee1 = Employee.new("Alice") employee2 = Employee.new("Bob") # 給与計算の呼び出し puts "#{employee1.calculate_salary} 円" # 個別のボーナスが加算されて表示 puts "#{employee2.calculate_salary} 円" # 別の個別のボーナスが加算されて表示 # 基本給の変更 Employee.change_base_salary(55000) # 給与計算の呼び出し(基本給が変更されているため、全社員に影響) puts "#{employee1.calculate_salary} 円" puts "#{employee2.calculate_salary} 円"
ボーナスは人(インスタンス)ごとに変わるのでインスタンスメソッド 基本給は全従業員(全インスタンス)に共通しているのでクラスメソッドを使用する