プログラミングにおいて、三項演算子(条件演算子)はシンプルな条件分岐を簡潔に記述できる便利なツールです。しかし、使い方を誤るとコードの可読性が低下し、バグの温床となることもあります。本記事では、三項演算子の適切な使い方を考察し、可読性を損なわない書き方を紹介します。
1. 三項演算子とは?
三項演算子(Ternary Operator)は、条件に応じて異なる値を返す演算子で、多くのプログラミング言語で ? :
の形式で使われます。
一般的な構文
condition ? trueValue : falseValue;
例えば、数値が偶数か奇数かを判定する処理を考えてみます。
const number = 4; const result = (number % 2 === 0) ? "Even" : "Odd"; console.log(result); // "Even"
このように、三項演算子を使うと if-else
を省略でき、簡潔なコードになります。
2. 三項演算子のメリット
2.1 コードの簡潔さ
三項演算子は、簡単な条件分岐を一行で表現できるため、コードを短くできます。
例:if-else を使った場合
let result; if (number % 2 === 0) { result = "Even"; } else { result = "Odd"; }
例:三項演算子を使った場合
let result = (number % 2 === 0) ? "Even" : "Odd";
このように if-else
よりもスッキリ書くことができます。
2.2 変数の初期化と代入を同時に行える
三項演算子を使うと、変数の宣言と代入を一度に行えるため、余計なコードを減らせます。
age = 20 category = "Adult" if age >= 18 else "Minor" print(category) # "Adult"
3. 三項演算子のデメリットと避けるべき使い方
3.1 ネストすると可読性が低下する
三項演算子を多用しすぎると、コードが読みづらくなります。
例:ネストした三項演算子(悪い例)
const grade = (score >= 90) ? "A" : (score >= 80) ? "B" : (score >= 70) ? "C" : "F";
一行で書けてはいますが、条件が複雑になり、可読性が大きく損なわれています。
改善例:if-else を使う
let grade; if (score >= 90) { grade = "A"; } else if (score >= 80) { grade = "B"; } else if (score >= 70) { grade = "C"; } else { grade = "F"; }
可読性を考えると、複雑な条件分岐では if-else
を使う方が適切です。
3.2 副作用のある処理を入れない
三項演算子の中に関数呼び出しや console.log()
などの副作用のある処理を含めると、予期せぬ動作を引き起こす可能性があります。
悪い例
(isValid) ? console.log("Valid") : console.log("Invalid");
このような場合は、if-else
を使う方が明確です。
良い例
if (isValid) { console.log("Valid"); } else { console.log("Invalid"); }
4. 三項演算子を適切に使うためのガイドライン
✅ シンプルな条件分岐に限定する
三項演算子は、「A か B のどちらか」 というシンプルな条件分岐に使いましょう。
✅ ネストしない
複数の条件分岐が必要な場合は、if-else
を使った方が可読性が向上します。
✅ 値の代入・返却にのみ使用する
三項演算子は、変数への代入や関数の戻り値に使う のが最適です。
function getStatusMessage(status) { return (status === "success") ? "Operation completed" : "Operation failed"; }
5. まとめ
三項演算子は便利な構文ですが、無闇に使うと可読性を損なうことがあります。以下のポイントを押さえつつ、適切に活用しましょう。
- シンプルな条件分岐に使用する
- ネストを避ける
- 副作用のある処理を入れない
- 値の代入や関数の戻り値に限定する