0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】if-elsif の使い分けと `(n - 1).times` の可読性について

0
Posted at

株売買問題を通して、

  • if-elseif-elsif の違い
  • (n - 1).times の書き方と可読性

について整理しました。


✅ 完成コード

n, buy, sell = gets.split.map(&:to_i)

tickets = 0
benefit = 0
(n - 1).times do 
    price = gets.to_i
    
    if price <= buy
        tickets += 1 #持ち株枚数が増える
        benefit -= price #購入額分利益から引く
    elsif price >= sell
        benefit += tickets * price #持ち株枚数*株価を利益に足す
        tickets = 0 #チケット枚数リセット
    end
end

final_price = gets.to_i
benefit += tickets * final_price

puts benefit

📚学び① (n - 1).times は「意味」より「可読性」

今回の処理は

  • 最終日(N日目)は特別ルール
  • それ以前の N-1 日だけ通常ルール

そのため

(n - 1).times do

としている。


❓ なぜ括弧を付けるのか?

Ruby では

n-1.times

と書いても動く。

しかし、

  • n - 1 がまとまりなのか
  • 1.times がまとまりなのか

が一瞬分かりづらい。

そこで

(n - 1).times

と書くことで

「n から 1 を引いた回数だけ繰り返す」

という意図が明確になる。

実際、最初はカッコなしで書いており、
最終株価final_priceがちゃんと取得できているか確認したところ、
2回目の株価を取得してしまっていた。
つまりn-1.times doは1回目しか処理されていなかった。
可読性とは「人間の目線でコードが見やすいかどうか?」のことを言うのかと勘違いしていたけど、
実際は『コンピューターが正確に処理できるかどうか?』ということだった。


📚 学び② if-else と if-elsif の違い

今回のルールは3パターンある。

  1. price <= buy → 買う
  2. price >= sell → 売る
  3. それ以外 → 何もしない

❌ if-else だとどうなる?

if price <= buy
  買う
else
  売る
end

この場合、

buy < price < sell

でも売ってしまう。

👉 2択しか作れない。


✅ if-elsif なら?

if price <= buy
  買う
elsif price >= sell
  売る
end

この形なら

  • 条件① → 買う
  • 条件② → 売る
  • どちらでもない → 何もしない

👉 自然に3択になる。


🎯 違いまとめ

書き方 条件に当てはまらない場合
if-else 必ず else 実行
if-elsif 何もしない

🚀 まとめ

今回の学び:

  • (n - 1).times は動作よりも「意図を明確にする書き方」
  • if-else は2択
  • if-elsif は3択以上対応

学習メモとして記録。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?