2
0

More than 1 year has passed since last update.

Ruby 問題 if,else ポイント付与サービス

Posted at

はじめに

1月〜プログラミングスクールで学習しています。
これから平日は~3/25まで毎日何かしらアウトプットのため投稿を続ける予定です。
今回は if,elseを使って簡単なポイント付与サービスを実装します。
※Ruby2.6.5の環境を使用し学習しています。

問題

トレーディングカードショップで商品を購入するとポイントが付与されます。
以下条件によってポイント付与率が変わります。

  • 購入金額が9999円以下の場合、1%のポイント
  • 購入金額が10000円以上の場合、2%のポイント
    このように付与されるポイントを出力するメソッドを作ります。

また、購入者が誕生日の場合はポイントが5倍になります。
誕生日の場合はtrue, 誕生日でない場合はfalseで表します。
また、小数点以下をすべてのポイント計算が終わったあとに.floorメソッドを使って切り捨てます。

calculate_points(500, false)  5ポイント付与されました。

実装例

まずは購入金額が9999円以下の場合、1%のポイント、購入金額が10000円以上の場合、2%のポイントが付与されるように下記記述しました。
amount = 購入金額 is_birthday = 誕生日か、それ以外か(ture,falseで表します)

def calculate_points(amount, is_birthday)
  if amount <= 9999
    point = amount * 0.01
  else 
    point = amount * 0.02
  end

次に誕生日か否かの条件分岐を作ります。
.floorメソッドについて(Ruby 3.1ですが)
Ruby 3.1 リファレンスマニュアルinstance method Float#floor

if is_birthday
    point = point * 5
  end
  puts "#{point.floor}ポイント付与されました。"
end

上記2つを合わせたのがこちらになります。

def calculate_points(amount, is_birthday)
  if amount <= 9999
    point = amount * 0.01
  else 
    point = amount * 0.02
  end
  if is_birthday
    point = point * 5
  end
  puts "#{point.floor}ポイント付与されました。"
end

今回ポイントとなったのはポイントには小数点が必要ないことです(ポイントだけに:innocent:
そこで.floorメソッドを使うことでうまく表現することができました〜
ではまた:runner:

2
0
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0