3秒でわかる
条件によって2つの値のどちらかを返す演算子。短い二択を式として書けるため、変数への代入や文字列への埋め込みに向いています。
もう少し詳しく
どういうものか
三項演算子は、条件とその真の場合の値、偽の場合の値の3つを取る演算子です。if文が「処理を分岐させる文」であるのに対し、三項演算子は「値になる式」である点が根本的に違います。値なので、そのまま変数に代入したり、関数の引数に渡したり、文字列の中へ埋め込んだりできます。Pythonでは真の値を先に書き、JavaScriptやJavaでは条件を先に書きます。
なぜ必要か
「会員なら割引価格、そうでなければ通常価格」のような二択を、4行のif文で書くと変数の宣言と代入が分かれ、初期値をどうするか考える手間が生まれます。式で書ければ宣言と同時に確定でき、その変数が後から書き換わらないことも読み手に伝わります。JSXやf文字列のように、文を書けない場所で分岐したいときにも唯一の選択肢になります。
具体例
age = 17
label = "大人" if age >= 18 else "子ども"
print(f"区分は{label}です")
items = []
print(f"{len(items)}件" if items else "該当なし")JavaScriptでは並びが変わります。
const price = isMember ? 800 : 1000;
const name = user.nickname ?? "ゲスト"; // null と undefined のときだけ既定値つまずきやすいところ
入れ子にして読めなくなる例が最も多く見られます。3つ以上の分岐が必要になったら、素直にif文へ戻すか、辞書やオブジェクトで対応表を作るほうが読みやすくなります。もうひとつ、三項演算子の中で print や append のような副作用のある処理を呼ぼうとする誤りです。これは値を作る式であって、処理を並べる場所ではありません。JavaScriptで既定値を入れる目的なら、0 や空文字を残したいかどうかで || と ?? を使い分けます。読みやすさの目安としては、1行に収まり、条件がひとつで、返す値が両方とも短いときだけ使うと決めておくと迷いません。行が折り返すほど長くなった時点が、if文へ書き直す合図だと考えておくと安全です。
似た用語との違い
| 書き方 | 性質 | 向いている場面 |
|---|---|---|
| if文 | 文 | 分岐ごとに複数の処理をする |
| 三項演算子 | 式 | 二択の値を1つ決める |
| 辞書での対応表 | データ | 分岐が3つ以上ある |
覚え方
if文は処理を選ぶもの、三項演算子は値を選ぶものです。書いた結果が変数に入るかどうかで、どちらを使うべきかを判断できます。