基礎

Rubyの三項演算子入門|if-elseを1行で書く方法

三項演算子は、if-else文を1行で簡潔に記述できる演算子です。条件 ? 真の場合 : 偽の場合の形式で書き、条件に応じた値を返します。シンプルな条件分岐を短く書きたいときに非常に便利で、変数への代入やメソッドの引数によく使われます。

基本的な使い方

三項演算子の構文は条件式 ? 真の場合の値 : 偽の場合の値です。

Ruby
age = 20

# 三項演算子
status = age >= 18 ? '成人' : '未成年'
puts status

# 同じことをif文で書くと
status2 = if age >= 18
            '成人'
          else
            '未成年'
          end
puts status2
実行結果
成人
成人

三項演算子を使うと、if-else文の5行を1行にまとめることができます。変数への代入が主な目的で、条件によって代入する値を切り替えたい場合に最適です。

putsの中で直接使う

三項演算子は式(値を返す)なので、メソッドの引数としてそのまま使えます。

Ruby
score = 75

puts score >= 60 ? '合格' : '不合格'

# 式展開の中でも使える
puts "結果: #{score >= 80 ? '優秀' : '普通'}"
実行結果
合格
結果: 普通

実践的な使い方

デフォルト値の設定

値がnilや空の場合にデフォルト値を設定するパターンでよく使います。

Ruby
name = nil
display_name = name ? name : 'ゲスト'
puts "ようこそ、#{display_name}さん"

name = '太郎'
display_name = name ? name : 'ゲスト'
puts "ようこそ、#{display_name}さん"
実行結果
ようこそ、ゲストさん
ようこそ、太郎さん

数値の変換

Ruby
# 偶数・奇数の判定
(1..6).each do |n|
  type = n.even? ? '偶数' : '奇数'
  puts "#{n}は#{type}です"
end
実行結果
1は奇数です
2は偶数です
3は奇数です
4は偶数です
5は奇数です
6は偶数です

メソッドの戻り値に使う

Ruby
def fee(age)
  age >= 18 ? 1000 : 500
end

def greeting(hour)
  hour < 12 ? 'おはようございます' : 'こんにちは'
end

puts "大人の料金: #{fee(25)}円"
puts "子供の料金: #{fee(10)}円"
puts greeting(9)
puts greeting(14)
実行結果
大人の料金: 1000円
子供の料金: 500円
おはようございます
こんにちは

ネスト(入れ子)の三項演算子

三項演算子はネストできますが、読みにくくなるため一般的には推奨されません。

Ruby
score = 85

# ネストした三項演算子(非推奨)
grade = score >= 90 ? 'A' : score >= 80 ? 'B' : score >= 70 ? 'C' : 'D'
puts "評価: #{grade}"

# こういう場合はcase文の方が読みやすい
実行結果
評価: B
三項演算子を使うべき場面

三項演算子は「2つの選択肢から1つを選ぶ」シンプルなケースに最適です。変数への代入、メソッドの引数、文字列展開の中で使うと、コードがすっきりします。

三項演算子のネストは避ける

三項演算子を入れ子にすると、コードが非常に読みにくくなります。3つ以上の条件分岐がある場合は、if-elsif文やcase文を使いましょう。可読性はパフォーマンスよりも重要です。

まとめ

  • 三項演算子は条件 ? 真の値 : 偽の値の形式で書く
  • if-else文を1行に短縮できる
  • 変数への代入やメソッドの引数に使うと効果的
  • ネスト(入れ子)は可読性が下がるため避ける
  • 複雑な条件にはif-elsif文やcase文を使う