頑張らないために頑張る

ゆるく頑張ります

三項演算子の基本

Posted at — Oct 7, 2024

概要

三項演算子(条件演算子、条件式)は、条件に基づいて異なる値を返すことができる演算子です。言ってしまえば、「簡易的な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には三項演算子が存在しない。

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合体演算子と組み合わせると、より簡潔に記述できる場合があります。

// null合体演算子との組み合わせ
let result = value1 ?? (condition ? value2 : value3);

ただ、これを狙うよりは「覚えてたら使う機会がたまに来るかもね」程度な気がします。

まとめ

三項演算子は、適切な場面で使用すれば、コードを簡潔に記述できます。しかし、可読性や実行順序に注意しないと、バグの原因となる可能性があります。

重要なのは、コードの可読性を高め、保守性を向上させることです。 三項演算子を使うか、if-else文を使うかは、状況に応じて判断しましょう。

参考

  1. Pythonの仕様
  2. Rubyの仕様
  3. JavaScriptの仕様
  4. PHPの仕様
  5. Javaの仕様
  6. Swiftの仕様
  7. 三項演算子?:は悪である。
comments powered by Disqus