ポイント付与、誕生日ポイント付与の問題(ruby)
999円以下の買い物には3%
1000円以上の買い物には5%
誕生日には5倍ポイントとなるような記述の問題。
calculate_points(amount, is_birthday)を使用して呼び出すこと。
(出力例)calculate_points(500, false) → ポイントは15点です
if文を利用することは考えたが、パターンは4つ(「999円以下で誕生日以外」「999円以下で誕生日」「1000円以上で誕生日以外」「1000円以上で誕生日」)あるので記述がやたら冗長になると感じた。
def calculate_points(amount, is_birthday) if amount < 1000 && is_birthday == false puts "ポイントは#{(amount * 0.03).floor}点です" elsif amount < 1000 && is_birthday == true puts "ポイントは#{(amount * 0.03 * 5).floor}点です" elsif amount > 1000 && is_birthday == false puts "ポイントは#{(amount * 0.05).floor}点です" else puts "ポイントは#{(amount * 0.05 * 5).floor}点です" end end
とりあえず出力はされたが、冗長である。
模範回答は以下
def calculate_points(amount, is_birthday) if amount <= 999 point = amount * 0.03 else point = amount * 0.05 end if is_birthday point = point * 5 end puts "ポイントは#{point.floor}点です" end
分岐を作るが、どちらも point を定義。
is_birthday が true か false なので、 if is_birthday とすることで条件分岐ができる。
point = point * 5
で amount で分岐した point を代入。
point *= 5
とすることも可。
if 文を連続使用すること、定義する変数を少なくすることでスッキリした記述になっている。