三項演算子は使うべき?可読性を犠牲にしない使い方

プログラミングにおいて、三項演算子(条件演算子)はシンプルな条件分岐を簡潔に記述できる便利なツールです。しかし、使い方を誤るとコードの可読性が低下し、バグの温床となることもあります。本記事では、三項演算子の適切な使い方を考察し、可読性を損なわない書き方を紹介します。

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. まとめ

三項演算子は便利な構文ですが、無闇に使うと可読性を損なうことがあります。以下のポイントを押さえつつ、適切に活用しましょう。

  • シンプルな条件分岐に使用する
  • ネストを避ける
  • 副作用のある処理を入れない
  • 値の代入や関数の戻り値に限定する