三項演算子で条件分岐をシンプルに書こう

学習の目標

本章では、以下の内容を学習します。

  • 三項演算子の基本的な書き方を習得する
  • 三項演算子とif-else文の違いを理解する
  • 三項演算子が特に役立つ場面を把握する
  • 三項演算子を使う際の注意点を学ぶ

はじめに

前回の章では、if文を使った条件分岐について学びました。if文は非常に便利ですが、単純な条件分岐を行う場合、複数行にわたるコードが必要になります。

プログラミングでは、同じ機能をより簡潔に表現できる方法があると便利です。三項演算子(さんこうえんざんし)は、シンプルな条件分岐を1行で書ける便利な機能です。特に変数に値を代入する際の条件分岐でよく使われます。

この章では、三項演算子の基本から実践的な使い方まで詳しく見ていきましょう。

三項演算子の基本

if文との比較

まず、通常のif文で条件分岐を書いた場合と、三項演算子で書いた場合を比較してみましょう。

ternary.rbというファイルを作成し、以下のコードを書いてみてください。

score = 80
# if文を使った条件分岐
if score >= 70
result = "合格"
else
result = "不合格"
end
puts result # 合格
# 三項演算子を使った条件分岐
result = score >= 70 ? "合格" : "不合格"
puts result # 合格

上記の例では、どちらも同じ処理を行っていますが、三項演算子を使うと1行で簡潔に書けていることがわかります。

三項演算子の構文

三項演算子の基本的な構文は次のとおりです。

条件式 ? 真の場合の値 : 偽の場合の値

この文法は、次のように読むことができます。

「もし条件式が真なら真の場合の値を返し、そうでなければ偽の場合の値を返す」

三項演算子の名前の由来は、この演算子が3つの部分(条件式、真の場合の値、偽の場合の値)から構成されているためです。

三項演算子の実践的な使い方

変数への代入

三項演算子は、条件によって異なる値を変数に代入する場合にとても便利です。

age = 18
status = age >= 20 ? "成人" : "未成年"
puts status # 未成年

このように、条件に応じて変数に代入する値を変えたい場合、三項演算子を使うとコードがすっきりします。

メソッドの戻り値として使う

三項演算子はメソッドの戻り値を条件に応じて変えたい場合にも役立ちます。

def check_age(age)
age >= 20 ? "お酒を飲むことができます" : "お酒を飲むことはできません"
end
puts check_age(18) # お酒を飲むことはできません
puts check_age(25) # お酒を飲むことができます

このように、簡単な条件分岐であれば、メソッド内でreturnを書く必要もなく、三項演算子だけでシンプルに表現できます。

文字列の中での使用

三項演算子は、文字列の中で使用することもできます。これにより、文字列の一部を条件によって変えることができます。

name = "太郎"
age = 18
puts "#{name}さんは#{age >= 20 ? '成人' : '未成年'}です。" # 太郎さんは未成年です。

この例では、文字列内で三項演算子を使って、年齢に応じて「成人」または「未成年」という文字列を埋め込んでいます。

三項演算子を使う際のポイント

使いどころを考える

三項演算子はとても便利ですが、すべての条件分岐に適しているわけではありません。特に以下のような場合は、通常のif-else文を使った方が良いでしょう。

  1. 条件が複雑な場合

    # あまり読みやすくない三項演算子の例
    result = (age >= 20 && student) || (age >= 18 && country == "USA") ? "許可" : "不許可"
  2. 真の場合と偽の場合で複数の処理を行いたい場合

    # 複数の処理がある場合はif-elseの方が適している
    if score >= 70
    result = "合格"
    puts "よくできました!"
    else
    result = "不合格"
    puts "もう少し頑張りましょう。"
    end

ネストした三項演算子には注意

三項演算子を入れ子(ネスト)にすることも可能ですが、読みにくくなる傾向があります。

# ネストした三項演算子(読みにくい)
result = score >= 80 ? "優" : score >= 70 ? "良" : score >= 60 ? "可" : "不可"

このようなケースでは、以下のようにif-elsif-else文を使った方が読みやすくなります。

# より読みやすいif-elsif-else文
if score >= 80
result = "優"
elsif score >= 70
result = "良"
elsif score >= 60
result = "可"
else
result = "不可"
end

初心者にとっての三項演算子

三項演算子は、慣れないうちは読みにくく感じるかもしれません。特にプログラミング初心者の方は、最初は通常のif-else文を使って書き、コードの動作をしっかり理解した上で、徐々に三項演算子を取り入れていくとよいでしょう。

実践例: 三項演算子の活用

では、より実践的な例で三項演算子の使い方を見てみましょう。

例1: 正負の判定

number = -5
sign = number > 0 ? "正の数" : number < 0 ? "負の数" : "ゼロ"
puts "#{number}は#{sign}です。" # -5は負の数です。

例2: 偶数・奇数の判定

numbers = [1, 2, 3, 4, 5]
numbers.each do |n|
puts "#{n}は#{n.even? ? '偶数' : '奇数'}です。"
end
# 出力:
# 1は奇数です。
# 2は偶数です。
# 3は奇数です。
# 4は偶数です。
# 5は奇数です。

例3: デフォルト値の設定

def greet(name = nil)
name = name.nil? ? "ゲスト" : name
"こんにちは、#{name}さん!"
end
puts greet("太郎") # こんにちは、太郎さん!
puts greet # こんにちは、ゲストさん!

まとめ

本章では、三項演算子について学習しました。以下の内容を理解できたことと思います。

  • 三項演算子は 条件式 ? 真の場合の値 : 偽の場合の値 という形式で書く
  • 単純な条件分岐をコンパクトに書くことができる
  • 変数への代入、メソッドの戻り値、文字列内での使用など、様々な場面で活用できる
  • 複雑な条件や複数の処理がある場合は、通常のif-else文を使った方が読みやすい

三項演算子は、適切な場面で使えば、コードをより簡潔にし、読みやすくする強力なツールです。ただし、常に可読性を意識し、複雑になりすぎる場合は通常のif-else文を使うことも大切です。

プログラミングでは、同じ処理を様々な書き方で表現できることがよくあります。その中からコードの読みやすさと簡潔さのバランスを考えて、最適な書き方を選ぶ判断力を養っていきましょう。

このセクションは有料サブスクリプションへの登録、またはログインが必要です。完全なコンテンツにアクセスするには、料金ページ(/pricing)をご覧ください。購入済みの場合は、ログインしてください。

Starterプランでより詳しく学習

この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。

作成者:とまだ
Previous
if/unlessによる条件分岐の書き方