Rubyのif文についての記事のアイキャッチ画像。

【Ruby】if文は上から順に評価されることを理解|elsif の書き方に注意!

未経験からWeb系企業への転職を目指し、日々プログラミング学習中です。

paizaのRuby問題集を使って基礎の復習をしていたところ、「整数の範囲に応じてメッセージを表示する」だけのシンプルな問題なのに、思わぬところでつまづいたため、備忘録として残しておきます。

問題内容

標準入力から整数を 1 つ受け取って、以下の条件に応じたメッセージを表示します。

  • 50 より小さい → AAAは50より小さい
  • 50 以上 150より小さい → AAAは50以上150より小さい
  • 150 以上 → AAAは150以上

AAA には受け取った整数が入ります。

誤:私が最初に書いたコード

私は最初次のように書いていました。

number = gets.to_i

if number < 50
  puts "#{number}は50より小さい"
elsif 50 < = number < 150
  puts "#{number}は50以上150より小さい"
else
  puts "#{number}は150以上"
end

elsif 50 < = number < 150が誤りだった。

正:正しいコード

number = gets.to_i

if number < 50
  puts "#{number}は50より小さい"
elsif number < 150
  puts "#{number}は50以上150より小さい"
else
  puts "#{number}は150以上"
end

なぜ「elsif number < 150」だけで問題ないのか?

if number < 5050未満を除外済み だから。

流れはこう:

  1. 最初の条件 → 50 未満だけ
  2. 2 つ目の条件 → 上で除外されたあとに「150 未満」を判定(=50〜149)
  3. 残り全部 → 150以上

Ruby の if は上から順に評価されるため、範囲を書くときに 毎回下限を書く必要がない のがポイント。

今回学んだこと

  • Ruby では 連鎖比較(A <= x < B)が使えない
  • 「上から順に除外」の考え方で if 文を組むとシンプルに書ける

-Ruby
-,

Translate »