Ruby の unless と if:違いと使い分け・後置記法まとめ

スポンサーリンク

Ruby の unless と if:違いと使い分け・後置記法まとめ

Ruby の unless は「条件が偽のときに実行する」制御構文です。if !condition と同じ意味ですが、否定を明示せずに読みやすく書けます。


基本構文の比較

# if で否定を書く場合
if !logged_in
  redirect_to login_path
end

# unless で書く場合(同じ意味)
unless logged_in
  redirect_to login_path
end

unless は「〜でなければ」と読めるので、否定条件を自然な日本語に近い形で書けます。


if / unless の基本構文

# if
if 条件
  # 条件が真のとき実行
end

# unless
unless 条件
  # 条件が偽のとき実行
end

else との組み合わせ

# if ... else
if score >= 60
  puts "合格"
else
  puts "不合格"
end

# unless ... else
unless score < 60
  puts "合格"
else
  puts "不合格"
end

unless elseif else を逆にしたものです。else ブロックが必要な場合は if の方が読みやすいケースが多いです。

unless に elsif は使えない

# NG:unless に elsif は書けない(構文エラー)
unless score < 60
  puts "合格"
elsif score < 40
  puts "再試験"
end

# OK:条件分岐が複数あるときは if を使う
if score >= 60
  puts "合格"
elsif score >= 40
  puts "再試験"
else
  puts "不合格"
end

後置 if / 後置 unless

条件が単純な場合は行末に書く「後置記法」が使えます。1行でコンパクトに書けます。

# 後置 if
puts "ログイン済み" if logged_in

# 後置 unless
puts "未ログイン" unless logged_in

# 処理の抑制によく使う
return if errors.any?
next unless item.valid?
raise "not found" unless user

後置記法は早期リターンや条件付きスキップの場面でよく使われます。


いつ unless を使うべきか

状況 推奨
否定条件1つ・else なし unless が読みやすい
否定条件1つ・else あり どちらでも可(if の方が無難)
elsif が必要 if を使う(unless は使えない)
!not が重なる unless で二重否定を避ける
複雑な条件式 if を使う(unless は単純な条件向き)

二重否定は避けるのが鉄則です。

# NG:二重否定で読みづらい
unless !valid?
  save
end

# OK:if で素直に書く
if valid?
  save
end

まとめ

構文 意味 使いどころ
if 条件 条件が真のとき実行 基本の条件分岐
unless 条件 条件が偽のとき実行 否定条件・else なし
処理 if 条件 後置 if 1行で書ける単純な条件
処理 unless 条件 後置 unless 早期リターン・スキップ
unless 条件 else 使えるが読みづらくなりがち if else に書き換え推奨
unless 条件 elsif 使えない if elsif を使う

Ruby のバージョン確認や環境構築については「Rubyのバージョン管理:rbenv・miseの使い方と切り替え方法」も参照してください。