結論から言います。
Rubyの三項演算子は、「単純な二択の値を返す(代入する)」ためだけに使用し、少しでもロジックが複雑になるなら、迷わず if 文を使うのが実務の正解です。
ネットの解説記事では、ただ「短く書ける便利な方法」として紹介されることが多いですが、それは大きな間違いです。
効率的な開発とは、単に行数を削ることではなく、「誰が読んでもすぐに意図が理解できるコード」を積み重ねることです。
Webエンジニアを目指すなら、可読性と保守性を両立させるための「正しい使い分け」を身につけてください。
執筆者:kazu |
|
三項演算子の基本:戻り値を直接利用する最短ルート
Rubyにおける三項演算子(条件演算子)の構文は 条件式 ? 真の時の値 : 偽の時の値 です。
ここで重要なのは、三項演算子が「式」であり、必ず「値(戻り値)」を返すという点です。
条件分岐と代入を1行に集約し、重複(DRY)を排除する
単純な条件分岐で変数に値をセットしたい場合、if 文を使うと冗長になり、変数名を2回書く手間が発生します。
三項演算子を使えば、これを1行で、かつスマートに表現できます。
ダメな例:単純な代入を if でダラダラと書く非効率
# 動きますが、正直言って時間の無駄です
user_status = "active"
if user_status == "active"
label = "有効"
else
label = "無効"
end
puts label
このコード、4〜5行も使っていますが、やっていることは単なる「ラベルの決定」です。
label という変数が何度も登場し、視覚的なノイズが多すぎます。
効率厨の私から見れば、1ミリも美しくありません。
良い例:三項演算子で戻り値をスマートに受け取る
# これが実務における「最短ルート」です
user_status = "active"
label = user_status == "active" ? "有効" : "無効"
puts label
これなら1行で完結し、意図も明確です。
「user_statusがactiveなら有効、そうでなければ無効を変数に代入する」という流れが、視線の移動を最小限に抑えて理解できます。
ネスト(入れ子)や複数条件に三項演算子を使わない
初心者がやりがちな最悪のパターンが、三項演算子の中にさらに三項演算子を詰め込む「ネスト」です。
これは「技術負債を自ら生み出している」と言っても過言ではありません。
記号だらけのコードは人間の脳にとって「読解のノイズ」でしかない
三項演算子の強みは、そのシンプルさにあります。
条件が3つ以上(elsifが必要なケース)になった瞬間、? と : の境界線が曖昧になり、バグの温床になります。
短く書くことに固執して、チームメンバーの読解時間を奪うのは、プロとして最も恥ずべき行為です。
ダメな例:判読不能な「入れ子」コード
# レビューで見つけたら即リジェクト対象です
score = 85
rank = score >= 90 ? "A" : (score >= 70 ? "B" : "C")
これをパッと見て、条件の優先順位を確信を持って答えられますか?
括弧があっても読みにくい。
脳に余計な負荷をかけるコードは、実務では「悪」です。
良い例:素直に if や case 文を活用する
# 読みやすさこそが、真の効率です
rank = if score >= 90
"A"
elsif score >= 70
"B"
else
"C"
end
Rubyの if は値を返すため、このように代入式を左辺に置くことができます。
行数は増えますが、条件の追加や変更にも強く、デバッグも容易です。
結局、これが一番早いんです。
使い分けの判断基準:kazuが提唱する「3つの規律」
三項演算子を使うか、if を使うか。
迷った時は以下の基準に自分を照らし合わせてください。
| 分岐の複雑さ | 推奨する書き方 |
|---|---|
| 単純な二択(真か偽か) | 三項演算子 |
| 3つ以上の条件分岐(elsif) | if / case 文 |
| 条件式が長すぎて1行に収まらない | if 文 |
| 内部でメソッド呼び出しを行う | if 文 |
特に注意すべきは「三項演算子で複数のメソッドを動かす」ことです。
condition ? method_a : method_b のような書き方は、単なる値の返却ではないため、意図が伝わりにくくなります。
あくまで「値を一つ選んで返す」という目的に限定してください。
まとめ:三項演算子は「短縮」ではなく「整理」のためにある
Rubyの三項演算子は、適切に使えばコードを美しく整理してくれます。
- 単純な値の代入には積極的に使い、冗長な
ifを排除する。 - ネストは例外なく禁止。それはエンジニアとしての怠慢。
- 1ミリでも「読みにくい」と感じたら、行数を惜しまず
ifに戻す。
「書ける」ことと「保守できる」ことは別次元の話です。
実務で評価されるのは、常に後者であることを忘れないでください。
以上です。



コメント