第 35 回 Ruby/Rails 勉強会@関西の宿題
クラスを定義してみよう
身のまわりのものをクラスとして定義してください。 まずは今日の例にあがっていたクラスを自分なりに実装して動かしてみてください。
例がたい焼きだったので、みんなお好み焼きを作っているようだった。
なので、違うものを作ってみる。
require 'forwardable' # 名前空間のための module module Cook # なべを用意 class Pan extend Forwardable # なべには食べごろの時間と中の食材がある def initialize(good_for_eating) @good_for_eating = good_for_eating @ingredient = [] end # なべに食材を投入 def_delegator(:@ingredient, :<<) # なべを火にかける def boil @st = Time.now end # 調理の経過時間 (秒) def elapsed_time if @st.nil? 0 else Time.now - @st end end # 食べごろ? def eatable? if @st.nil? false else @good_for_eating.include?(Time.now - @st) end end end end
good_for_eating に Range を与えないといけないのが、あまりにひどい。
他にも色々ひどいが気にしない。
irb から実行してみる。
require 'cook' # カレーを作ろう curry = Cook::Pan.new(75*60..77*60) # 玉葱を炒める curry << :onion # => [:onion] curry.boil # 肉を炒める curry << :beef # => [:onion, :beef] # にんじんを煮込む curry << :carrot # => [:onion, :beef, :carrot] # 20 分ほど煮込んだら、じゃがいもを入れる curry.elapsed_time / 60 # => 20.2281151166667 curry << :potato # => [:onion, :beef, :carrot, :potato] # 1 時間ほど煮込んだら、カレーのルーを入れる curry.elapsed_time / 60 # => 60.6024656666667 curry << :curry # => [:onion, :beef, :carrot, :potato, :curry] # 早く食べたい ... curry.eatable? # => false # まだ? curry.eatable? # => true # 完成