閉じる

【C#】三項演算子の基本と書き方|条件分岐を1行で書く実践例

C#の三項演算子は、条件分岐を1行でスマートに書ける便利な構文です。

if文よりもコンパクトに書けますが、書き方を誤ると読みづらくなってしまいます。

本記事では、C#の三項演算子の基本構文から実践的な使い方、注意点までをていねいに解説します。

【C#】三項演算子とは何か

三項演算子の概要

三項演算子(条件演算子)は、条件に応じて2つの値のうちどちらか一方を選ぶための演算子です。

C#では?:の組み合わせで表現します。

通常のif-else文では複数行になる条件分岐を、三項演算子なら1行にまとめることができます。

そのため、短い条件分岐を簡潔に書きたい場合にとても有効です。

三項演算子は、「条件に応じて値を選ぶ」ことに特化した書き方だと理解しておくと、使いどころが見えてきます。

三項演算子の基本構文と読み方

基本構文

C#における三項演算子の基本構文は次のとおりです。

C#
// 条件 ? 条件がtrueのときの値 : 条件がfalseのときの値;
var result = 条件式 ? 値1 : 値2;

「条件式がtrueなら値1、falseなら値2」という意味になります。

if-elseとの対応関係

次のif-else文と、三項演算子は同じ意味を持ちます。

C#
// if-else文で書く場合
int x = 10;
string message;

if (x > 5)
{
    message = "5より大きいです";
}
else
{
    message = "5以下です";
}

これを三項演算子で書き直すと、次のようになります。

C#
// 三項演算子で書く場合
int x = 10;
string message = (x > 5) ? "5より大きいです" : "5以下です";

どちらも最終的にmessageに代入される文字列は同じです。

ただし、三項演算子の方が1行で完結しています。

実行例で確認する三項演算子の動き

サンプルコード1: 数値によるメッセージ分岐

では、実際にC#のコンソールアプリで動きを確認してみます。

C#
using System;

class Program
{
    static void Main()
    {
        int x = 3;

        // 三項演算子を使ってメッセージを決定
        // 条件: x > 5
        // trueのとき: "5より大きいです"
        // falseのとき: "5以下です"
        string message = (x > 5) ? "5より大きいです" : "5以下です";

        Console.WriteLine("x = " + x);
        Console.WriteLine("結果: " + message);
    }
}
実行結果
x = 3
結果: 5以下です

このように、条件式の評価結果によって、どちらの文字列が代入されるかが変わることが確認できます。

三項演算子の基本的な書き方パターン

1. 変数への代入に使う

最もよく使われるのは、変数に値を代入するときに条件によって値を切り替えるパターンです。

C#
int age = 20;

// 条件によってメッセージを切り替える
string category = (age >= 18) ? "大人" : "未成年";

Console.WriteLine(category);  // 大人

このように、if文ではなく「値を選ぶ」という目的で使うと読みやすくなります。

2. メソッドの戻り値に使う

メソッドから返す値を条件で切り替えたい場合にもよく使われます。

C#
static string GetSignLabel(int n)
{
    // 0より大きければ"正の数"、そうでなければ"0以下"
    return (n > 0) ? "正の数" : "0以下";
}

戻り値が単純に2択で決まる場合には、三項演算子を使うことでメソッドの中身を短くできます。

3. 文字列補間や出力の中で使う

文字列を組み立てる際に、部分的に三項演算子を使うことも可能です。

C#
int score = 75;

// $"..." の中で三項演算子を使用
string result = $"点数: {score} 点 ({(score >= 60 ? "合格" : "不合格")})";

Console.WriteLine(result);  // 点数: 75 点 (合格)

「この部分だけ条件で変えたい」というときに便利な書き方です。

nullチェックに使える三項演算子

基本的なnullチェックの書き方

オブジェクトがnullかどうかで処理を分けたい場合にも三項演算子はよく使われます。

C#
string? name = null;

// nameがnullかどうかを判定してメッセージを切り替える
string displayName = (name != null) ? name : "名前未設定";

Console.WriteLine(displayName);  // 名前未設定

nullチェックとデフォルト値の設定は三項演算子と非常に相性が良いです。

null合体演算子との比較

C#には、nullチェック専用の??(null合体演算子)もあります。

上の例は次のようにも書けます。

C#
string? name = null;

// null合体演算子を使った書き方
string displayName = name ?? "名前未設定";

「単純なnullチェックでデフォルト値を入れるだけ」の場合は??を使った方が読みやすいことが多いです。

三項演算子は、より複雑な条件を判定したい場合に使うと良いでしょう。

ネストした三項演算子の書き方と注意点

ネスト(入れ子)の例

三項演算子は、条件が3パターン以上ある場合でも使えますが、ネストさせすぎると読みづらくなる点に注意が必要です。

次の例では、点数から評価ランク(A/B/C)を求めています。

C#
int score = 85;

// 三項演算子をネストして評価を決める例
string rank = (score >= 90) ? "A"
             : (score >= 70) ? "B"
             : "C";

Console.WriteLine(rank);  // B

括弧で囲んで整形すればある程度読みやすくなりますが、それでも条件が多くなると混乱しやすくなります

if-elseとの比較と判断基準

同じ処理をif-elseで書くと、次のようになります。

C#
int score = 85;
string rank;

if (score >= 90)
{
    rank = "A";
}
else if (score >= 70)
{
    rank = "B";
}
else
{
    rank = "C";
}

このように、分岐が3つ以上ある場合や条件が複雑な場合は、if-elseの方が直感的に理解しやすいことが多いです。

「読んだときに一瞬で理解できるかどうか」を基準に、三項演算子を使うかif-elseを使うか判断するとよいでしょう。

三項演算子を使うときの注意点とベストプラクティス

1. 「値を選ぶ」用途に限定する

三項演算子は「どちらかの値を選んで返す」ための構文です。

そのため、副作用(代入やメソッド呼び出しなど)をゴチャゴチャ書くのは避けるべきです。

悪い例として、次のような書き方は読みづらくなります。

C#
// 推奨されない例: 三項演算子の中で副作用を伴う処理をしている
bool isOk = true;
string message = isOk ? DoSomethingAndGetMessage() : LogErrorAndGetMessage();

三項演算子の中では、なるべく単純な式(値の決定)だけを書くようにしましょう。

2. 条件式を短く保つ

条件部分(条件式 ? ... : ...)が長くなると、全体の見通しが悪くなります。

複雑な条件は、あらかじめ変数に切り出すと読みやすくなります。

C#
// 複雑な条件を先に変数にしておく
bool isAdult = (age >= 18);
string label = isAdult ? "大人" : "未成年";

「三項演算子は1行で読める程度の簡単な条件に使う」というルールを持っておくと、安全に使えます。

3. ネストが増えたら迷わずif-elseへ

三項演算子を2段、3段とネストしていると感じたら、いったんif-elseに書き直すことを検討してください。

無理に1行でまとめることが目的ではありません。

  • 条件が2パターン → 三項演算子が有力候補
  • 条件が3パターン以上 → if-elseやswitchも検討

このように、可読性を最優先に構文を選ぶのがベストプラクティスです。

三項演算子とtrue/falseの直接利用

bool値をそのまま利用するケース

条件式自体がboolの変数である場合、次のような書き方もできます。

C#
bool isEnabled = true;

// isEnabledがtrueなら"有効"、falseなら"無効"
string status = isEnabled ? "有効" : "無効";

Console.WriteLine(status);  // 有効

ただし、「true なら X、false なら Y」という単純な形であれば、メソッド名や変数名を工夫してif文なしで済ませる選択肢もあります。

まとめ

三項演算子は、「条件によって2つの値のどちらかを選ぶ」ためのコンパクトな記法です。

基本構文は条件 ? trueのときの値 : falseのときの値で、短い条件分岐を1行で書きたいときに威力を発揮します。

変数への代入やメソッドの戻り値、文字列補間などに使うとコードがすっきりしますが、ネストしすぎたり副作用を含めたりすると一気に読みづらくなります。

「シンプルな2択の値選択にだけ使う」「複雑になったら素直にif-elseへ戻す」という基準を守れば、C#の三項演算子を安全かつ効果的に活用できます。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!