Rubyの三項演算子を徹底解説!スッキリ書ける条件分岐のコツと使い方
生徒
「Rubyでif文を書くと、たった一行の処理なのに何行も使ってしまって、コードが長くなってしまいます。もっと短く書く方法はありませんか?」
先生
「そんな時は『三項演算子』という便利な書き方がありますよ。記号の『?』と『:』を組み合わせて、一行で条件分岐を表現できるんです。」
生徒
「記号だけで分岐ができるんですか?なんだか暗号みたいで難しそうです…。」
先生
「最初はそう見えますが、読み方のルールさえ覚えれば大丈夫です!初心者の方でも使いこなせるように、優しく解説していきますね。」
1. 三項演算子とは?一行で条件を分ける魔法
Rubyの三項演算子(さんこうえんざんし)とは、if...elseの処理をたった一行に凝縮して書くための特別な書き方です。通常、if文を使うと「もし何々なら」「こうする」「そうでなければ」「ああする」という風に、どうしても数行にわたって記述することになります。しかし、三項演算子を使えば、これらをコンパクトにまとめることができます。
演算子という言葉は少し難しく聞こえるかもしれませんが、足し算の「+」や引き算の「-」と同じような仲間の記号だと思ってください。三つの項目(条件、真の時の値、偽の時の値)を使って計算(判定)を行うため、このように呼ばれています。この書き方を覚えることで、プログラムの見た目が非常にスッキリし、熟練したエンジニアのようなコードに一歩近づくことができます。
Rubyの文法を基礎からしっかり固めたい人や、 現場で役立つ「テスト駆動開発」の考え方まで身につけたい人には、 評価の高いこの一冊がおすすめです。
プロを目指す人のためのRuby入門をAmazonで見る※ Amazon広告リンク
2. 基本の書き方「条件 ? 真 : 偽」を覚えよう
三項演算子の文法はとてもシンプルです。まずは条件式を書き、その後に「?(はてな)」を置きます。次に条件が正しい(真)ときの値を書き、さらに「:(コロン)」で区切って、最後に条件が正しくない(偽)ときの値を書きます。全体の構成は、条件 ? 真の場合の処理 : 偽の場合の処理という形になります。
例えば、持っているお金が1000円以上なら「豪華なランチ」、そうでなければ「いつものランチ」というメッセージを画面に出すプログラムを考えてみましょう。まずはif文で書いた場合と、三項演算子で書いた場合の違いを見比べてみてください。プログラミング未経験の方は、putsは画面に文字を出す命令、money = 1500は変数という箱にお金を入れることだと考えてください。
money = 1500
# 通常のif文
if money >= 1000
puts '豪華なランチ'
else
puts 'いつものランチ'
end
# 三項演算子を使った書き方
puts money >= 1000 ? '豪華なランチ' : 'いつものランチ'
豪華なランチ
豪華なランチ
いかがでしょうか。たった一行で、先ほどと同じ結果を得ることができました。条件が「1500は1000以上か?」と問いかけ、答えが「はい(真)」だったので、コロンの左側にある「豪華なランチ」が選ばれたわけです。直感的で、慣れると非常に読みやすいと感じるはずです。
3. 三項演算子で変数に値を代入するテクニック
三項演算子が最も威力を発揮するのは、判定結果を変数に保存するときです。if文を使って変数に値を入れようとすると、同じ変数名を何度も書かなければならず、書き間違いの原因にもなります。しかし、三項演算子なら代入の右側にサッと記述できるため、スマートに値を決定できます。
変数とは、データを入れておく名前付きの箱のことです。ここでは、テストの点数によって「合格」か「不合格」かという文字を箱に入れる例を見てみましょう。代入という言葉は、数学の代入と同じで、右側の計算結果を左側の箱に入れるという意味です。初心者の方は、この「結果を変数に入れる」という流れを意識してみてください。
score = 75
# 点数が80点以上なら「合格」、そうでなければ「不合格」をresultに入れる
result = score >= 80 ? '合格' : '不合格'
puts "あなたの結果は#{result}です。"
あなたの結果は不合格です。
この書き方をすると、resultという箱に何が入るのかが一目で分かりますね。コードが横に長くならず、上から下へ流れるように読めるようになります。これはプログラミングにおいて可読性(かどくせい)、つまり読みやすさを高めるために非常に大切なポイントです。
4. 奇数か偶数かを判定する実用的な例
もう少し具体的な例で練習してみましょう。プログラミングの基礎でよく登場するのが、ある数字が「奇数(きすう)」か「偶数(ぐうすう)」かを調べる処理です。Rubyでは数字に対してodd?という命令を使うと、その数字が奇数なら「真(true)」、そうでなければ「偽(false)」を返してくれます。
これを三項演算子と組み合わせると、とても綺麗なコードになります。奇数は1, 3, 5のように2で割り切れない数、偶数は2, 4, 6のように2で割り切れる数ですね。パソコンの中では、こうした判定が瞬時に行われています。自分で数字を書き換えて、結果がどう変わるか試してみるのが上達への近道です。
number = 42
# 奇数かどうかを判定
type = number.odd? ? '奇数' : '偶数'
puts "#{number}は#{type}ですね。"
42は偶数ですね。
5. 注意!三項演算子のネストは避けるべき理由
三項演算子は非常に便利ですが、使いすぎには注意が必要です。特にやってはいけないのが、三項演算子の中にさらに三項演算子を書く「ネスト(入れ子)」という状態です。これをやってしまうと、どこが条件でどこが結果なのかが全く分からなくなってしまい、プログラムの解読が困難になります。
これをアンチパターン(良くない書き方)と呼びます。例えば、「80点以上ならA、60点以上ならB、それ以外はC」という三段階の判定を無理やり一行で書こうとするのは避けましょう。このような場合は、素直にif...elsif...elseを使うか、別の方法で書くのが正解です。あくまで「二つに一つを選ぶ」というシンプルな場面で使うのが、三項演算子を正しく使いこなす極意です。
# 悪い例:読みづらくてバグの原因になる
# score = 75
# status = score >= 80 ? '優秀' : (score >= 60 ? '普通' : '頑張ろう')
# ↑カッコが多くて、パッと見て意味が分かりません!
このように、複雑なことを一行でやろうとすると、後から読み返した自分が苦労することになります。プログラムは書く時間よりも読まれる時間の方がずっと長いため、常に「他の人が見てもすぐ分かるか」という優しさを忘れないようにしましょう。
6. 条件を括弧で囲んで読みやすくする工夫
三項演算子を使う際、条件式の部分を「( )(かっこ)」で囲むことがあります。Rubyのルールとしては括弧がなくても動きますが、括弧をつけることで「ここが判定する条件ですよ!」ということが強調され、読みやすさが向上します。特に条件式が少し長くなった時などは、この一工夫が大きな差を生みます。
例えば、「年齢が20歳以上」という条件を書くときに、age >= 20 ? ...と書くよりも、(age >= 20) ? ...と書いたほうが、境界線がハッキリします。パソコンの操作に慣れていない方でも、文章の中で括弧があると大切な部分だと分かりますよね。それと同じ感覚で、コードにもメリハリをつけていきましょう。
age = 22
# 括弧を使うことで、条件がどこまでか明確になります
status = (age >= 20) ? '大人' : '子供'
puts "あなたは#{status}です。"
あなたは大人です。
7. 三項演算子の使いどころを見極める
三項演算子、if文、そして以前に学んだ後置if。Rubyには同じことを実現するための方法がいくつもあります。どれを使うべきか迷うかもしれませんが、基準はいつも「シンプルさ」です。代入の右側でサッと使いたいなら三項演算子、もし何々ならという条件だけを強調したいなら後置if、複雑な分岐ならif文というように、使い分けてみてください。
プログラミング未経験の方は、まずはいろいろな書き方を真似してみることから始めましょう。自分でコードを書いて、エラーが出たり思い通りの結果が出たりする経験を積み重ねることで、自然と感覚が身についていきます。三項演算子は、あなたのコードをプロっぽく、かつ美しく見せてくれる強力なツールです。ぜひ楽しみながら活用してみてくださいね!