【オブジェクト指向】インスタンス変数の使い方がちょっとだけわかった話
結論
配列のクラス変数を用意してnewする時にインスタンスを必ず配列に追加するようにしておけば、後から集計に使えるってことに気付きました。
今回の例
Foodクラスに@@foods = []
という配列型のクラス変数を持っておき、12行目のinputメソッドでインスタンス生成するたびに@@foods
へインスタンスを追加しておきます。
すると、クラスメソッドのshow_all_calory
(20行目)でいとも簡単に今まで生成したインスタンスを繰り返し処理したり、カロリー合計が計算できてしまいます。
このように、newするたびにクラス変数の配列にインスタンスごと格納しておくことによって、あとでインスタンスたちをまとめて処理したい時に役立つのでした。
class Food # ここにクラスの定義を書き加えてください attr_reader :name, :calory @@foods = [] @@line = "-----------------------------" def initialize(name, calory) @name, @calory = name, calory end def self.input puts "料理名を入力してください" name = gets.chomp puts "カロリーを入力してください" calory = gets.to_i @@foods << self.new(name, calory) end def self.show_all_calory puts @@line total = 0 @@foods.each do |food| puts "#{food.name} :#{food.calory}kcal" total += food.calory end puts @@line puts "カロリー合計 :#{total}kcal" end end while true do puts "[0]:カロリーを入力する" puts "[1]:カロリーの合計を見る" input = gets.to_i if input == 0 Food.input # カロリーの入力 elsif input == 1 Food.show_all_calory # カロリーの合計を表示 exit end end