三項演算子(条件演算子、条件式)は、条件に基づいて異なる値を返すことができる演算子です。言ってしまえば、「簡易的なIF文」という感じです。if-else文と同様の機能を持ちますが、より簡潔な記述に振った機能が特徴的。そのため、「簡単な判定文をパッと書きたい」というシチュエーションでよく使われます。
一般的な記述形式は、条件 ? 値1 : 値2
です。条件
が真の場合、値1
が返されます。偽の場合は値2
が返されます。
プログラミング言語 | if文 | 三項演算子 | 備考 |
---|---|---|---|
Python | if condition: action() |
action() if condition else other() |
|
Ruby | if condition then action end |
condition ? action : other |
|
JavaScript | if (condition) action() あるいは condition && action() |
condition ? action() : other() |
|
PHP | if ($condition) action(); |
$condition ? action() : other(); |
|
Java | if (condition) { action(); } |
condition ? action() : other() |
|
Swift | if condition { action() } |
condition ? action() : other() |
|
Kotlin | if (condition) action() |
なし | Kotlinには三項演算子が存在しない。 |
Go | if condition { action() } |
なし | Goには三項演算子が存在しない。 |
条件 ? 値1 : 値2
という一般的な形式で記述できる。値1 if 条件 else 値2
と記述する。Pythonと言った例外はあるものの、おおむね条件 ? 値1 : 値2
で三項演算子が実装できます。
また、意外にもKotlinやGolangはそもそも三項演算子が存在しません。これらはIF文を利用することになります。
三項演算子は非常に便利な一方で、誤った使い方をするとコードの可読性を下げたり、バグの原因になったりします。
三項演算子を深く入れ子にすると、コードが複雑になり、理解が難しくなります。
// 可読性が低い例
let result = condition1 ? value1 : condition2 ? value2 : value3;
// より良い例
if (condition1) {
result = value1;
} else if (condition2) {
result = value2;
} else {
result = value3;
}
また、条件式や値が長くなると、一目で処理内容が把握できなくなります。
// 可読性が低い例
let result = veryLongCondition ? veryLongExpression1 : veryLongExpression2;
// より良い例
let temp1 = veryLongCondition;
let result = temp1 ? veryLongExpression1 : veryLongExpression2;
複数の条件を組み合わせた複雑なロジックは、三項演算子で記述すると、意図が分かりにくくなります。
// 可読性が低い例
let result = condition1 && condition2 ? value1 : condition3 || condition4 ? value2 : value3;
// より良い例
if (condition1 && condition2) {
result = value1;
} else if (condition3 || condition4) {
result = value2;
} else {
result = value3;
}
null合体演算子と組み合わせると、より簡潔に記述できる場合があります。
// null合体演算子との組み合わせ
let result = value1 ?? (condition ? value2 : value3);
ただ、これを狙うよりは「覚えてたら使う機会がたまに来るかもね」程度な気がします。
三項演算子は、適切な場面で使用すれば、コードを簡潔に記述できます。しかし、可読性や実行順序に注意しないと、バグの原因となる可能性があります。
重要なのは、コードの可読性を高め、保守性を向上させることです。 三項演算子を使うか、if-else文を使うかは、状況に応じて判断しましょう。