未経験から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以上"
endelsif 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 < 50 で 50未満を除外済み だから。
流れはこう:
- 最初の条件 → 50 未満だけ
- 2 つ目の条件 → 上で除外されたあとに「150 未満」を判定(=50〜149)
- 残り全部 → 150以上
Ruby の if は上から順に評価されるため、範囲を書くときに 毎回下限を書く必要がない のがポイント。
今回学んだこと
- Ruby では 連鎖比較(A <= x < B)が使えない
- 「上から順に除外」の考え方で if 文を組むとシンプルに書ける