JavaScript 三項演算子
三項演算子はJavaScriptにおける強力なツールの一つで、簡潔な条件式を書くことを可能にします。
これは if...else 文を一行で記述するためのショートカット(短縮表記)です。三項演算子をマスターすることで、特に単純な条件付き代入を扱う際に、コードの可読性と効率性を大幅に向上させることができます。
1. 三項演算子を理解する
三項演算子は条件演算子の一種であり、3つのオペランド(被演算子)を受け取ります:条件、その条件がトゥルーシー(truthy)な時に実行される式、そしてフォルシー(falsy)な時に実行される式です。
1.1 構文
三項演算子のシンタックスは以下の通りです:
condition ? expressionIfTrue : expressionIfFalse;- condition (条件): 結果が
trueまたはfalseに評価される式。 - expressionIfTrue (真の場合の式):
conditionがtrueの場合に実行される式。 - expressionIfFalse (偽の場合の式):
conditionがfalseの場合に実行される式。
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 文を使用すべき場面
- 多くの分岐を持つ複雑な条件を扱う場合。
- 各分岐内で(単なる値の返却だけでなく)複数の処理を実行する必要がある場合。
- 簡潔さよりも可読性が優先される場合。