TypeScriptで三項演算子を使った短絡評価のテクニック10選

TypeScriptの三項演算子の使い方のイラストTypeScript
この記事は約20分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

●TypeScriptの三項演算子とは?

皆さん、TypeScriptでコードを書いていて、条件分岐を使う場面に遭遇したことはありませんか?

その時、ifやswitch文を使うことが一般的ですが、もっとシンプルに書く方法があることをご存知でしょうか。

実は、三項演算子を使えば、条件分岐をワンライナーで表現できるんです。

三項演算子は、条件式とその結果を1行で書くことができる、便利な演算子です。

これを使いこなせば、コードがスッキリして読みやすくなります。

例えば、ユーザーの年齢に応じて、メッセージを変える処理を書くとしましょう。

if文を使うと、こんな感じになりますよね。

let message: string;
if (age >= 20) {
  message = "大人です";
} else {
  message = "子供です";
}

でも、三項演算子を使えば、たった1行で書けてしまいます。

const message: string = age >= 20 ? "大人です" : "子供です";

こんなふうに、条件式 ? 真の場合の値 : 偽の場合の値 という形式で書くんです。

簡潔で読みやすいコードになりますよね。

これから、三項演算子の基本的な使い方から、もっと応用的なテクニックまで、TypeScriptでの実践的な例を交えながらお伝えしていきます。

コードをスッキリ書くコツを学んで、プログラミングスキルを磨いていきましょう!

○三項演算子の基本形式と利用シーン

三項演算子の基本形式は、以下のようになります。

条件式 ? 真の場合の値 : 偽の場合の値

条件式の結果がtrueであれば、真の場合の値が返され、falseであれば、偽の場合の値が返されます。

三項演算子が活躍するシーンは、主に次のようなケースです。

  1. if-else文を使うほどでもない、簡単な条件判定を行いたい場合
  2. 条件に応じて、異なる値を変数に代入したい場合
  3. 条件に基づいて、関数から異なる値を返したい場合
  4. 条件に応じて、異なるUIコンポーネントを表示したい場合

これらのシーンで三項演算子を活用することで、コードがシンプルになり、可読性が向上します。

例えば、ユーザーのログイン状態に応じて、「ログイン」または「ログアウト」ボタンを表示する場合、次のように書けます。

const buttonText: string = isLoggedIn ? "ログアウト" : "ログイン";

こうすることで、if-else文を使うよりも、コードがスッキリしますよね。

ただし、三項演算子を使いすぎると、かえってコードが読みにくくなることもあります。

複雑な条件判定や、ネストが深くなる場合は、if-else文を使った方が良いでしょう。

使い分けが大切ですね。

●コードをシンプルに保つテクニック

さて、三項演算子の基本的な使い方はわかってきましたね。

でも、実際のコーディングでは、もう少し複雑な条件分岐に遭遇することも多いと思います。

そんな時、どうすればコードをスッキリ保てるのでしょうか。

ここからは、三項演算子を使ってコードをシンプルに保つためのテクニックを、具体的なサンプルコードを交えながら解説していきます。

少し難しいかもしれませんが、これらのテクニックを身につければ、より効率的で可読性の高いコードが書けるようになりますよ。

○サンプルコード2:ネストされた三項演算子の整理

まずは、ネストされた三項演算子の整理方法から見ていきましょう。

ネストされた三項演算子とは、三項演算子の中に別の三項演算子が含まれているような、複雑な条件分岐のことです。

例えば、こんな感じのコードですね。

const message = age >= 20 ? (gender === "male" ? "男性の大人" : "女性の大人") : (gender === "male" ? "男の子" : "女の子");

一見すると、コードが短くなって良さそうですが、実はこのようなネストされた三項演算子は、可読性を損なう可能性があります。

そこで、ネストされた三項演算子を整理するためのテクニックが、「論理演算子を使った条件の分割」です。

const isAdult = age >= 20;
const isMale = gender === "male";
const message = isAdult ? (isMale ? "男性の大人" : "女性の大人") : (isMale ? "男の子" : "女の子");

このように、条件式を変数に切り出すことで、三項演算子のネストが浅くなり、可読性が向上します。

さらに、三項演算子を使わずに、if-else文で書き換えることもできます。

let message: string;
if (age >= 20) {
  message = gender === "male" ? "男性の大人" : "女性の大人";
} else {
  message = gender === "male" ? "男の子" : "女の子";
}

状況に応じて、三項演算子とif-else文を使い分けることが大切ですね。

○サンプルコード3:複数条件の効率的な処理

次に、複数の条件を効率的に処理する方法を見ていきましょう。

例えば、ユーザーの年齢によって、異なるメッセージを表示するとします。

let message: string;
if (age <= 12) {
  message = "子供";
} else if (age <= 19) {
  message = "ティーンエイジャー";
} else {
  message = "大人";
}

このように、if-else文を使って条件分岐を書くこともできますが、三項演算子を使えば、もっとスッキリ書けます。

const message = age <= 12 ? "子供" : age <= 19 ? "ティーンエイジャー" : "大人";

複数の条件を三項演算子でつなげることで、コードが短くなり、読みやすくなります。

ただし、条件が多すぎると、かえって可読性が下がってしまうので注意が必要です。

目安として、3つ以上の条件を三項演算子でつなげるのは避けた方が良いでしょう。

○サンプルコード4:可読性を考慮した書き方

最後に、可読性を考慮した三項演算子の書き方について見ていきましょう。

三項演算子は1行で書けるので便利ですが、長すぎる1行は可読性を損ねます。

そこで、三項演算子を複数行に分けて書く方法があります。

const message = age >= 20
  ? "大人です"
  : "子供です";

このように、条件式と値を別の行に分けて書くことで、可読性が向上します。

また、三項演算子の条件式や値が複雑な場合は、変数に切り出すことでコードがわかりやすくなります。

const isAdult = age >= 20 && hasLicense;
const canDrink = isAdult && hasDrinkingPermit;
const message = canDrink ? "お酒が飲めます" : "お酒は飲めません";

変数名を工夫することで、条件の意味が明確になり、コードの理解が深まります。

●三項演算子を使った条件付きレンダリング

さて、三項演算子の基本的な使い方やコードをシンプルに保つテクニックについては理解が深まってきましたね。

ただ、三項演算子の真価は、UIの条件付きレンダリングでこそ発揮されます。

条件付きレンダリングとは、ある条件に基づいて、UIコンポーネントの表示や非表示を切り替えることを指します。

例えば、ユーザーがログインしているかどうかで、「ログイン」ボタンと「マイページ」ボタンを切り替えるような場合ですね。

このような場面で、三項演算子を使うことで、スッキリとしたコードでUIの表示制御ができるようになります。

それでは、サンプルコードを見ながら、具体的な使い方を見ていきましょう。

○サンプルコード5:UIコンポーネントの表示制御

まずは、シンプルなUIコンポーネントの表示制御から見ていきます。

ユーザーがログインしているかどうかに応じて、「ログイン」ボタンと「マイページ」ボタンを切り替える例です。

// ログイン状態を管理する変数
const isLoggedIn: boolean = true;

// ボタンを表示するJSX
const loginButton = (
  <button>ログイン</button>
);

const myPageButton = (
  <button>マイページ</button>
);

// 条件に応じてボタンを切り替える
const button = isLoggedIn ? myPageButton : loginButton;

// レンダリング
return (
  <div>
    {button}
  </div>
);

このように、三項演算子を使って、isLoggedInの値に応じて、loginButtonmyPageButtonを切り替えています。

JSXの中で直接三項演算子を使うこともできます。

return (
  <div>
    {isLoggedIn ? (
      <button>マイページ</button>
    ) : (
      <button>ログイン</button>
    )}
  </div>
);

このように書くことで、より簡潔に条件付きレンダリングを表現できます。

実行結果↓

// isLoggedInがtrueの場合
<div>
  <button>マイページ</button>
</div>

// isLoggedInがfalseの場合
<div>
  <button>ログイン</button>
</div>

isLoggedInの値に応じて、適切なボタンが表示されていますね。

このように、三項演算子を使うことで、UIの表示制御をスッキリと書くことができます。

条件が複雑になっても、三項演算子を使えば、可読性を保ちながらコードを書くことができるでしょう。

○サンプルコード6:動的クラスの割り当て

次に、三項演算子を使って、動的にクラスを割り当てる方法を見ていきます。

ボタンの状態に応じて、異なるクラスを割り当てる例です。

// ボタンの状態を管理する変数
const isActive: boolean = true;

// 条件に応じてクラスを割り当てる
const buttonClass = isActive ? "active" : "inactive";

// レンダリング
return (
  <button className={buttonClass}>
    ボタン
  </button>
);

このように、三項演算子を使って、isActiveの値に応じて、"active""inactive"のクラスを切り替えています。

実行結果↓

// isActiveがtrueの場合
<button class="active">
  ボタン
</button>

// isActiveがfalseの場合
<button class="inactive">
  ボタン
</button>

isActiveの値に応じて、適切なクラスが割り当てられていますね。

このように、三項演算子を使えば、動的なクラスの割り当てを簡潔に表現できます。

条件に応じたスタイルの切り替えが必要な場合に、とても便利なテクニックです。

●三項演算子を使った代入と戻り値

さて、三項演算子を使ったUIの条件付きレンダリングについては、理解が深まってきましたね。

でも、三項演算子の活用はそれだけではありません。

変数への代入や関数の戻り値にも、三項演算子を使うことができてしまいます。

実際のプログラミングでは、条件に応じて変数に値を代入したり、関数から条件付きの戻り値を返したりすることがよくあります。

そんな時、三項演算子を使えば、スッキリとしたコードで実装できてしまいます。

○サンプルコード7:条件に応じた変数への代入

まずは、条件に応じて変数に値を代入する例から見ていきましょう。

ユーザーの年齢に応じて、値段を計算する例です。

const age: number = 25;
const price: number = age < 18 ? 800 : 1200;

console.log(price);
// 実行結果: 1200

このように、三項演算子を使って、ageの値に応じて、priceに代入する値を切り替えています。

実行結果を見ると、ageが18歳未満ではないので、priceには1200が代入されていますね。

三項演算子を使わずに、if文で書くとこうなります。

let price: number;
if (age < 18) {
  price = 800;
} else {
  price = 1200;
}

三項演算子を使った方が、コードがスッキリしていて読みやすいですよね。

このように、三項演算子を使えば、条件に応じた変数への代入を簡潔に表現できます。

複数の条件がある場合でも、三項演算子を使えば、コードをスッキリ書くことができますよ。

○サンプルコード8:関数からの条件付き戻り値

次に、関数からの条件付き戻り値の例を見ていきましょう。

与えられた数値が正の数かどうかを判定する関数の例です。

function isPositive(num: number): string {
  return num > 0 ? "正の数です" : "正の数ではありません";
}

console.log(isPositive(5));
// 実行結果: "正の数です"

console.log(isPositive(-2));
// 実行結果: "正の数ではありません"

このように、三項演算子を使って、numの値に応じて、戻り値を切り替えています。

numが0より大きい場合は、”正の数です”を返し、そうでない場合は、”正の数ではありません”を返しています。

実行結果を見ると、引数に応じた適切な戻り値が返されていますね。

三項演算子を使わずに、if文で書くとこうなります。

function isPositive(num: number): string {
  if (num > 0) {
    return "正の数です";
  } else {
    return "正の数ではありません";
  }
}

三項演算子を使った方が、コードがシンプルで読みやすくなっています。

このように、三項演算子を使えば、関数からの条件付き戻り値を簡潔に表現できます。

●よくあるエラーとその対処法

さて、三項演算子の使い方については、だいぶ理解が深まってきましたね。

でも、実際にコードを書いていると、思わぬエラーに遭遇することがあります。特に、三項演算子を使う際によくあるエラーには、注意が必要です。

エラーに遭遇した時、どうすればいいのでしょうか?

慌てずに、落ち着いてデバッグすることが大切ですね。

エラーメッセージをよく読んで、原因を特定し、適切な対処を行うことが重要です。

ここからは、三項演算子を使う際によくあるエラーと、その対処法について見ていきましょう。

エラーを正しく理解し、適切にデバッグできるようになれば、より堅牢なコードを書けるようになるはずですよ。

○三項演算子の誤用とそのデバッグ方法

まずは、三項演算子の誤用によるエラーとそのデバッグ方法から見ていきましょう。

三項演算子の誤用の例として、条件式の後に演算子を忘れてしまうケースがあります。

// エラー例
const message = age >= 20 ? "大人です" "子供です";
//                               ↑ここに : が抜けている

このコードでは、条件式の後に : が抜けているため、エラーが発生します。

TypeScriptのコンパイラは、このようなエラーを検出してくれます。

エラーメッセージを確認すると、次のように表示されるでしょう。

error TS1005: ':' expected.

このエラーメッセージから、: が期待されている位置で見つからないことがわかります。

エラーが発生した行をよく見て、三項演算子の構文に誤りがないか確認しましょう。

この例では、: を追加することでエラーが解決します。

// 修正後
const message = age >= 20 ? "大人です" : "子供です";

このように、エラーメッセージを手がかりに、三項演算子の構文をしっかり確認することが大切です。

また、三項演算子の条件式に誤りがある場合もエラーが発生します。

// エラー例
const message = age = 20 ? "大人です" : "子供です";
//                  ↑ここは == または === でなければならない

このコードでは、条件式の中で代入演算子 = を使ってしまっているため、エラーが発生します。

TypeScriptのコンパイラは、このエラーを次のように報告します。

error TS2365: Operator '=' cannot be applied to types 'number' and '20'.

このエラーメッセージから、= 演算子が number 型と 20 という値に適用できないことがわかります。

条件式の中では、比較演算子 == または === を使う必要があります。

この例では、= を == に修正することでエラーが解決します。

// 修正後
const message = age == 20 ? "大人です" : "子供です";

このように、エラーメッセージを理解し、適切な演算子を使うことが重要ですね。

三項演算子を使う際は、構文の誤りや条件式の間違いに注意しましょう。

エラーが発生したら、コンパイラのエラーメッセージをよく読んで、原因を特定することが大切です。

そして、正しい構文で書き直すことで、エラーを解決できます。

○複雑な三項演算子のリファクタリング

次に、複雑な三項演算子をリファクタリングする方法について見ていきましょう。

三項演算子は便利な演算子ですが、使いすぎると、かえってコードの可読性を損ねてしまうことがあります。

特に、ネストされた三項演算子や、長すぎる三項演算子は、理解するのが難しくなります。

そんな時は、三項演算子をif文に書き換えたり、変数に分割したりすることで、コードをわかりやすくリファクタリングできます。

例えば、次のような複雑な三項演算子があるとします。

const message = age >= 20 ? (gender === "male" ? "男性の大人" : "女性の大人") : (gender === "male" ? "男の子" : "女の子");

このコードは、年齢と性別に応じて、メッセージを決定しています。

しかし、ネストされた三項演算子が使われているため、一見してロジックを理解するのが難しいですね。

このような場合は、三項演算子をif文に書き換えることで、コードをわかりやすくできます。

let message: string;
if (age >= 20) {
  if (gender === "male") {
    message = "男性の大人";
  } else {
    message = "女性の大人";
  }
} else {
  if (gender === "male") {
    message = "男の子";
  } else {
    message = "女の子";
  }
}

if文を使うことで、条件分岐のロジックが明確になりました。

コードが長くなってしまいましたが、可読性は向上しています。

また、条件式を変数に切り出すことで、三項演算子をシンプルにすることもできます。

const isAdult = age >= 20;
const isMale = gender === "male";
const message = isAdult ? (isMale ? "男性の大人" : "女性の大人") : (isMale ? "男の子" : "女の子");

こんな形で、条件式を変数に分割することで、三項演算子のネストが浅くなり、理解しやすくなります。

複雑な三項演算子に遭遇した時は、一度立ち止まって、リファクタリングできないか検討してみましょう。

if文への書き換えや、条件式の変数化など、コードをわかりやすくする工夫ができるはずです。

●TypeScriptの三項演算子の応用例

さて、三項演算子の基本的な使い方から、エラーへの対処法までを見てきましたが、ここからは、もっと実践的な応用例を見ていきましょう。

TypeScriptならではの三項演算子の活用法を学ぶことで、より効率的なコーディングができるようになるはずです。

実際のプロジェクトでは、APIからのレスポンスに基づいて処理を切り替えたり、状態に応じてメッセージを表示したりといった、動的な処理が求められることがよくあります。

そんな時、三項演算子を適切に使うことで、スッキリとしたコードで実装できるんです。

これから紹介するサンプルコードを通して、三項演算子のより実践的な使い方を学んでいきましょう。

きっと、仕事やプロジェクトですぐに役立つテクニックが身につくはずですよ。

○サンプルコード9:API応答に基づく動的処理

まずは、APIからのレスポンスに基づいて処理を切り替える例を見ていきましょう。

例えば、ユーザー情報を取得するAPIがあり、そのレスポンスに基づいて、画面に表示するメッセージを切り替えるとします。

// APIからのレスポンス(仮)
const response = {
  success: true,
  data: {
    id: 1,
    name: "John Doe",
    age: 25
  }
};

// レスポンスに基づいてメッセージを切り替える
const message = response.success
  ? `${response.data.name}さん、ようこそ!`
  : "ユーザー情報の取得に失敗しました。";

console.log(message);
// 実行結果: "John Doeさん、ようこそ!"

このように、三項演算子を使って、response.successの値に応じて、表示するメッセージを切り替えています。

response.successがtrueの場合は、response.dataからユーザー名を取得して、歓迎のメッセージを生成しています。

falseの場合は、エラーメッセージを返しています。

実行結果を見ると、APIのレスポンスに基づいて、適切なメッセージが生成されていることがわかります。

このように、三項演算子を使えば、APIの応答に基づく動的な処理を、シンプルなコードで実装できます。

レスポンスのデータ構造が複雑な場合でも、三項演算子の中で必要なデータを取り出せば、スッキリとしたコードで処理を切り替えられるでしょう。

○サンプルコード10:状態に応じたメッセージ表示

続いて、状態に応じてメッセージを表示する例を見ていきましょう。

例えば、ユーザーの年齢に応じて、異なるメッセージを表示するとします。

const age = 25;

const message = age >= 20
  ? "お酒の購入が可能です。"
  : "お酒の購入はできません。";

console.log(message);
// 実行結果: "お酒の購入が可能です。"

このように、三項演算子を使って、ageの値に応じて、表示するメッセージを切り替えています。

ageが20以上の場合は、”お酒の購入が可能です。”というメッセージを返し、20未満の場合は、”お酒の購入はできません。”というメッセージを返しています。

実行結果を見ると、ageの値に基づいて、適切なメッセージが表示されていますね。

このように、三項演算子を使えば、状態に応じたメッセージの表示を、シンプルなコードで実装できます。

まとめ

TypeScriptの三項演算子、いかがでしたか?基本的な使い方から応用例まで、様々なシーンでの活用方法を解説してきました。

三項演算子を使いこなすことで、コードがスッキリするだけでなく、動的な処理もシンプルに実装できるようになります。

TypeScriptのプログラミングスキルを上達させるためには、こうした便利な演算子を適切に使いこなすことが大切です。

三項演算子を使ったコーディングのコツを実践の中で身につけていくことで、より効率的で可読性の高いコードが書けるようになるでしょう。

最後までお読みいただき、ありがとうございました。

本記事で紹介したテクニックを活用して、TypeScriptプログラミングのスキルアップを目指しましょう。