Rubyでプログラミングをしていると、条件によって処理を分けたい場面が頻繁にあります。
多くの場合はif
文を使いますが、よりシンプルで簡潔にコードを記述するための強力な武器が「三項演算子」です。
三項演算子は、if
文を一行で表現できるシンタックスシュガー(糖衣構文)の一種で、使いこなせばコードがより洗練され、可読性が向上することもあります。
しかし、その特性を理解せずに乱用すると、逆に分かりにくいコードの原因にもなりかねません。
そこでこの記事では、Ruby開発における三項演算子の基本的な使い方から、if
文との明確な違い、そしてどのような場面で使うべきかという実践的な使いどころまで、豊富なサンプルコードと共に徹底的に解説します。
【本記事の信頼性】
- 執筆者は元エンジニア
- 大手プログラミングスクールのWebディレクター兼ライターを経験
- 自らも地元密着型のプログラミングスクールを運営
受講生から評判の良いプログラミングスクール
スクール |
特徴 |
受講料金 |
大手比較サイトで4年連続人気NO.1!受講生からの評判も非常に高く、Web系のエンジニアを目指すならRUNTEQ一択。 | 550,000円(給付金適用あり) | |
月単価80万円以上の現役エンジニア講師による指導!一度入会すればサポートは半永久的。 | 498,000円 | |
格安で質の高いWeb制作スキルを習得したい人におすすめ!業界最安級の料金でありながら、コミュニティやサポートが充実。 | 129,800円~ | |
完全無料でプログラミングが学べる貴重なスクール!最短1ヶ月で卒業可能。ゼロスク運営会社への就職もできる。 | 無料 | |
長期間に渡って学習し、希少人材を目指す人に最適なスクール!受講料は高いものの、高収入を得られる人材を目指せる。 | 96~132万円 |
Rubyの三項演算子とは?基本構文を理解しよう
三項演算子は、その名の通り「3つの項目(オペランド)」を使って条件分岐を表現する演算子です。
正式には「条件演算子」と呼ばれます。
その基本構文は、非常にシンプルです。
条件式 ? 真の場合の値 : 偽の場合の値
この一行で、以下のif
文と全く同じ意味を持ちます。
- 条件式 ⇒
true
かfalse
を返す式を記述します。 - ? ⇒ 条件式の結果が
true
(真)だった場合に、コロン(:
)の前にある「真の場合の値」を返します。 - : ⇒ 条件式の結果が
false
(偽)だった場合に、コロン(:
)の後ろにある「偽の場合の値」を返します。
条件分岐を非常にコンパクトに記述できる点が、三項演算子の最大の特徴と言えるでしょう。
三項演算子の基本的な使い方をコードで確認
言葉での説明だけでは、なかなかイメージが掴みづらいかもしれません。
ここでは、具体的なコードを見ながら、if
文を使った場合と三項演算子を使った場合を比較してみましょう。
ある数値が偶数か奇数かを判定し、結果を文字列として変数に代入する処理を考えます。
if文を使った場合のコード
number = 10
result = ''
if number % 2 == 0
result = '偶数です'
else
result = '奇数です'
end
puts result
三項演算子を使った場合のコード
number = 10
result = number % 2 == 0 ? '偶数です' : '奇数です'
puts result
実行結果
どちらのコードも、実行すると以下の同じ結果が出力されます。
偶数です
ソースコードの解説
if
文では、変数の初期化から分岐処理の記述まで含めて5行必要でした。
一方、三項演算子を使った場合は、わずか1行で同じ処理を完結させています。
number % 2 == 0
という条件式が真(true
)なので、?
と:
の間にある'偶数です'
という文字列がresult
変数に代入されました。
このように、条件によって変数に代入する値を切り替える、という場面が三項演算子の最も基本的で典型的な使い方になります。
if文との違いと正しい使い分け
三項演算子はif
文の代わりになりますが、常に三項演算子を使えばよいというわけではありません。
両者の特性を理解し、状況に応じて適切に使い分けることが、読みやすいコードを書く上で非常に重要です。
記述の簡潔さ
最も分かりやすい違いは、記述量でしょう。
単純な分岐であれば、三項演算子の方が圧倒的にコードが短くなります。
処理の複雑さ
三項演算子で実行できるのは、あくまで「値を返す」という単一の処理です。
もし、条件が真の場合や偽の場合に、複数行にわたる複雑な処理を行いたいのであれば、if
文を使うべきです。
三項演算子で無理に複雑な処理をしようとすると、コードが非常に読みにくくなってしまいます。
- 三項演算子が適しているケース: 条件に基づいて、変数にAかBのどちらかの値を代入するような、シンプルな値の振り分け。
- if文が適しているケース: 条件に基づいて、複数のメソッド呼び出しや計算など、複数行の処理を実行する場合。
迷ったときは、「コードの可読性」を第一に考えてください。
自分以外の誰かが、あるいは未来の自分がそのコードを読んだ時に、一目で処理内容を理解できるかどうか、という視点が大切です。
【応用】三項演算子のネスト(入れ子)とその注意点
三項演算子は、入れ子(ネスト)にすることで、3つ以上の条件分岐を表現することも理論上は可能です。
サンプルコード
数値が正の数か、負の数か、ゼロかを判定する処理を考えてみましょう。
number = -5
result = number > 0 ? '正の数です' : (number < 0 ? '負の数です' : 'ゼロです')
puts result
実行結果
負の数です
ソースコードの解説と注意点
このコードは正しく動作しますが、()
が多く、ぱっと見で構造を把握するのが難しいと感じないでしょうか。
最初の条件number > 0
が偽だった場合に、さらにnumber < 0 ? '負の数です' : 'ゼロです'
という第二の三項演算子が評価される構造になっています。
このように、三項演算子のネストは可読性を著しく低下させるため、一般的には非推奨とされています。
3つ以上の分岐が必要な場合は、素直にif/elsif/else
構文やcase
文を使いましょう。
# if/elsif/else を使った方が遥かに読みやすい
if number > 0
result = '正の数です'
elsif number < 0
result = '負の数です'
else
result = 'ゼロです'
end
三項演算子の実践的な使いどころ
では、実際の開発現場では、どのような場面で三項演算子が効果的に使われるのでしょうか。
ビュー(ERBなど)での表示切り替え
Webアプリケーションのビューテンプレート内で、変数の状態によって表示内容を切り替える際によく使われます。
<p>ユーザータイプ: <%= user.admin? ? '管理者' : '一般' %></p>
この例では、user
オブジェクトが管理者(admin?
がtrue
)であれば「管理者」、そうでなければ「一般」と表示を切り替えています。
変数にデフォルト値を設定する
ある変数がnil
や空文字だった場合に、デフォルト値を設定する際にも便利です。
# nameがnilや空でなければnameを、そうでなければ'ゲスト'を代入
display_name = (name.present? ? name : 'ゲスト')
メソッドの引数
メソッドを呼び出す際に、条件によって渡す引数を動的に変更したい場合にも使えます。
# is_premiumがtrueなら10、falseなら100を引数として渡す
calculate_points(user, is_premium ? 10 : 100)
まとめ
今回は、Rubyの三項演算子について、その基本からif
文との使い分け、実践的な活用法までを詳しく解説しました。
なお、Rubyを体系的に学んだり、Rubyのスキルを高めたりするためには、プログラミングスクールを利用するのも有効です。
細かな疑問がすぐに解決するだけでなく、現役エンジニアが「質の高いポートフォリオ」を作成するための手助けをしてくれたり、エンジニア就職・転職のコツを教えてくれたりするなど、様々なメリットがありますので、独学に疲れた方は検討してみてはいかがでしょうか。