復習 - クーポンコード
CoddyのRubyジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 16/57。
チャレンジ
中級Coupon クラスを完成させてください。ファクトリ Coupon.parse(code) は、パーセントが続く SAVE(SAVE10)または金額が続く OFF(OFF5)を受け付け、それ以外のコードに対しては nil を返します。定数 MAX_PERCENT(50)を超えるパーセントは 50 に減らされます。ファクトリが作成するすべてのクーポンはクラスインスタンス変数でカウントされ、Coupon.issued として読み取れるようにします。new は private にしてください。apply(total) は割引後の合計を返しますが、0 未満にはなりません。また、to_s は SAVE10 (10% off) または OFF5 (5.00 off) を返します。
提供されたコードは、注文の合計金額を最初の行から読み取り、その後の各行から 1 つずつコードを読み取ります。SAVE10 (10% off): 90.00 または invalid code HELLO を出力し、最後に issued: 2 を出力します。
コードは coupon.rb に記述してください。main.rb には提供された入出力コードが含まれており、編集できません。
自分で試してみよう
require_relative 'coupon'
# 提供された入出力コード: そのままにしておく
input = []
while (line = gets)
input << line.chomp
end
total = input[0].to_f
input.drop(1).each do |code|
coupon = Coupon.parse(code)
if coupon
puts format("%s: %.2f", coupon, coupon.apply(total))
else
puts "invalid code #{code}"
end
end
puts "issued: #{Coupon.issued}"
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Rubyオンラインコンパイラ