JavaScript 入門

JavaScript 三項演算子

三項演算子はJavaScriptにおける強力なツールの一つで、簡潔な条件式を書くことを可能にします。

これは if...else 文を一行で記述するためのショートカット(短縮表記)です。三項演算子をマスターすることで、特に単純な条件付き代入を扱う際に、コードの可読性と効率性を大幅に向上させることができます。

1. 三項演算子を理解する

三項演算子は条件演算子の一種であり、3つのオペランド(被演算子)を受け取ります:条件、その条件がトゥルーシー(truthy)な時に実行される式、そしてフォルシー(falsy)な時に実行される式です。

1.1 構文

三項演算子のシンタックスは以下の通りです:

condition ? expressionIfTrue : expressionIfFalse;
  • condition (条件): 結果が true または false に評価される式。
  • expressionIfTrue (真の場合の式): conditiontrue の場合に実行される式。
  • expressionIfFalse (偽の場合の式): conditionfalse の場合に実行される式。

1.2 仕組み

三項演算子はまず condition を評価します。もし条件が真であれば expressionIfTrue の値を返し、そうでなければ expressionIfFalse の値を返します。

2. 三項演算子の使用例

さまざまなシナリオで三項演算子がどのように活用されるか、具体的な例を見ていきましょう。

2.1 基礎例:偶数か奇数かの判定

let number = 7;
let result = (number % 2 === 0) ? "偶数" : "奇数";
console.log(result); // 出力: 奇数

number = 4;
result = (number % 2 === 0) ? "偶数" : "奇数";
console.log(result); // 出力: 偶数

この例では、三項演算子を使用して数値が偶数か奇数かを判定しています。条件 number % 2 === 0 は、数値が2で割り切れるかをチェックします。割り切れる場合は "偶数" を返し、そうでない場合は "奇数" を返します。

2.2 条件に基づく代入

let age = 20;
let isAdult = (age >= 18) ? true : false;
console.log(isAdult); // 出力: true

age = 16;
isAdult = (age >= 18) ? true : false;
console.log(isAdult); // 出力: false

ここでは、age(年齢)に基づいてブーリアン値isAdult(成人かどうか)変数に代入しています。age が18以上であれば true を、そうでなければ false を代入します。

2.3 関数の戻り値として使用

function checkSign(number) {
  return (number > 0) ? "正数" : (number < 0) ? "負数" : "零";
}

console.log(checkSign(5));    // 出力: 正数
console.log(checkSign(-2));   // 出力: 負数
console.log(checkSign(0));    // 出力: 零

この例は、関数内部で三項演算子を使用し、複数の条件に応じて異なる値を返す方法を示しています。これは三項演算子をチェイン(ネスト)させて複雑なロジックを処理できることも示していますが、過度なネストは可読性を低下させるため注意が必要です。

2.4 文字列内での使用

let isLoggedIn = true;
let message = isLoggedIn ? "おかえりなさい!" : "ログインしてください。";
console.log(message); // 出力: おかえりなさい!

isLoggedIn = false;
message = isLoggedIn ? "おかえりなさい!" : "ログインしてください。";
console.log(message); // 出力: ログインしてください。

ユーザーがログインしているかどうかに応じて、表示するメッセージを動的に切り替えています。

3. ネストされた三項演算子

三項演算子は、より複雑な条件を処理するためにネスト(入れ子)にすることができます。しかし、コードが読みにくくなるため、ネストの使用は慎重に行うべきです。

let score = 75;
let grade = (score >= 90) ? "A" : (score >= 80) ? "B" : (score >= 70) ? "C" : "D";
console.log(grade); // 出力: C

この例では、スコアに基づいて成績を割り当てています。動作はしますが、深くネストされた三項演算子は理解が難しくなります。このようなケースでは、if...else if...else 文を使用した方が可読性が高くなるのが一般的です。

4. 三項演算子 vs. if...else 文

三項演算子は if...else 文の簡潔な代替案ですが、常に最適な選択とは限りません。以下の比較表を参考にしてください。

特徴三項演算子if...else 文
簡潔さ単純な条件において非常に簡潔比較的冗長
可読性複雑な条件では低下しやすい複雑な条件でも一般的に読みやすい
ユースケース単純な条件付き代入や戻り値に最適複数の分岐を持つ複雑なロジックに適合
コードブロック各分岐で複数の文を実行できないブロック内で複数の文を実行可能

4.1 三項演算子を使用すべき場面

  • 単純な条件付き代入を行う場合。
  • 条件に基づいて単一の値を返す場合。
  • コードを可能な限り簡潔に保ちたい場合。

4.2 if...else 文を使用すべき場面

  • 多くの分岐を持つ複雑な条件を扱う場合。
  • 各分岐内で(単なる値の返却だけでなく)複数の処理を実行する必要がある場合。
  • 簡潔さよりも可読性が優先される場合。