こんにちは、かつコーチです。
「if文は分かるけど、unlessや三項演算子はいつ使えばいいの?」。
Rubyを学んでいると、こうした疑問を持つ方が多くいます。
この記事では、if文の基本から、Ruby特有のunless、三項演算子、後置ifまでを解説します。
読み終える頃には、場面に応じて条件分岐の書き方を使い分けられるようになります。
基本の書き方
if・elsif・elseの基本
条件分岐とは、条件によって実行する処理を切り替える仕組みのことです。
Rubyではif・elsif・else・endを使って条件分岐を書きます。
score = 75
if score >= 90
puts "評価はA"
elsif score >= 70
puts "評価はB"
elsif score >= 50
puts "評価はC"
else
puts "評価はD"
end
# => 評価はB
elsifはelse ifではなく、elsifと1語で書く点に注意してください。
elseifと書くとエラーになります。
比較演算子と論理演算子
条件式には、比較演算子や論理演算子を組み合わせて使います。
age = 20
has_license = true
if age >= 18 && has_license
puts "運転できます"
else
puts "運転できません"
end
# => 運転できます
&&は「かつ」、||は「または」、!は「否定」を表します。
weather = "雨"
if weather == "晴れ" || weather == "曇り"
puts "外出しましょう"
else
puts "傘を持って行きましょう"
end
# => 傘を持って行きましょう
unless:Ruby特有の否定条件構文
unlessとは、「条件が偽(false)のときに実行する」という、ifとは逆の意味を持つRuby特有の構文です。
logged_in = false
unless logged_in
puts "ログインしてください"
end
# => ログインしてください
上のコードは、次のif文と同じ意味になります。
logged_in = false
if !logged_in
puts "ログインしてください"
end
# => ログインしてください
「〜でない場合」という条件を書きたいとき、if !条件よりunless 条件のほうが素直に読めることがあります。
ただしunlessにelsifは使えず、否定条件が複雑になる場合はかえって読みにくくなるため注意が必要です。
stock = 0
unless stock > 0
puts "在庫がありません"
else
puts "在庫があります"
end
# => 在庫がありません
三項演算子
三項演算子とは、条件 ? 真の場合の値 : 偽の場合の値という形で、if文を1行で表現できる書き方のことです。
age = 20
message = age >= 20 ? "成人です" : "未成年です"
puts message
# => 成人です
代入する値を条件によって切り替えるだけのシンプルな場面で使うと、コードが簡潔になります。
stock = 3
status = stock > 0 ? "在庫あり" : "在庫切れ"
puts status
# => 在庫あり
後置if
後置ifとは、処理の後ろにif 条件を付けて、1行で条件分岐を書く方法のことです。
score = 100
puts "満点です!" if score == 100
# => 満点です!
条件を満たさなければ、何も出力されません。
score = 80
puts "満点です!" if score == 100
# (何も出力されない)
同様に、unlessにも後置形があります。
stock = 0
puts "在庫切れです" unless stock > 0
# => 在庫切れです
よくあるつまずきポイント・エラー対処
unlessにelseとelsifを両方書こうとして混乱する
私が実際に手を動かしていたとき、unlessの否定条件が二重になって混乱したことがあります。
❌ Before
age = 15
unless age < 18
puts "成人です"
else
unless age < 13
puts "未成年(13歳以上)です"
else
puts "子どもです"
end
end
# => 未成年(13歳以上)です
unlessを入れ子にした結果、「〜でない場合の、さらに〜でない場合」という二重否定になり、コードを読んでも条件がすぐに理解できませんでした。
✅ After
age = 15
if age >= 18
puts "成人です"
elsif age >= 13
puts "未成年(13歳以上)です"
else
puts "子どもです"
end
# => 未成年(13歳以上)です
条件分岐が2パターン以上に分かれる場合は、unlessではなくif・elsifを使ったほうが読みやすくなります。
unlessは「単純な否定を1つだけ表したいとき」に使うのがおすすめです。
まとめ
この記事のポイント
if・elsif・elseで複数の条件分岐を書ける(elseifではなくelsif)unlessは「条件が偽のときに実行する」Ruby特有の構文unlessにelsifは使えず、条件が複雑な場合はifを使うほうが読みやすい- 三項演算子
条件 ? 真 : 偽で1行の条件分岐を書ける - 後置if(
処理 if 条件)でシンプルな条件分岐を簡潔に書ける
次に読むべき記事
条件分岐の次は、繰り返し処理の書き方を学びましょう。
「for・while・timesで繰り返し処理」で、Rubyのループ処理を解説しています。