記事内に広告が含まれています

C#入門② | 条件分岐(if・switch・三項演算子)の基本

C#入門② C#入門

前回の「C#入門①」では、変数とデータ型について学びました。

C#入門① | 変数とデータ型の基本
C#を使ったプログラミングでは、まず「変数」と「データ型」を理解することが何より重要です。 この記事では、C#の変数と主要なデータ型について、実務でよく使うケースを踏まえて解説していきます。 変数とは プログラミングでは、データを一時的に保...

今回は、if文、switch文、switch式、三項演算子など、C#でよく使われる条件分岐の基本的な書き方を解説します。

実務でも役立つ読みやすいコードを書くための工夫も紹介します。

これからC#を学ぶ方や、読みやすいコードを書きたい初学者の方は、ぜひ参考にしてみてください。

if文

if文は、ある条件が成立したときだけ特定の処理を実行する構文で、条件分岐の際には最もよく使われます。

基本的な書き方

最も基本的な書き方は次の通りです。

if (条件)
{
    // 条件がtrueのときの処理
}
else
{
    // 条件がfalseのときの処理
}

以下は得点によって合格が不合格を判定するif文の例です。

int score = 60;

if (score >= 70)
{
    Console.WriteLine("合格です");
}
else
{
    Console.WriteLine("不合格です");
}

このコードでは、scoreが70以上であれば「合格です」と表示され、それ以外のとき(条件がfalseのとき)は「不合格です」と表示されます。

else if

else ifを使うと、「最初のifの条件が当てはまらなかったときに、別の条件を順番にチェックする」ことができます。

if (score >= 90)
{
    Console.WriteLine("とてもよくできました");
}
else if (score >= 80)
{
    Console.WriteLine("よくできました");
}
else if (score >= 70)
{
    Console.WriteLine("合格です");
}
else
{
    Console.WriteLine("もう少しがんばりましょう");
}

このように、ifelse ifelseの順で上から順番に条件を見ていき、最初に当てはまったものだけが実行されます。
つまり、どれか一つの処理だけが実行され、残りはスキップされます。

switch文

switch文は、変数の値に応じて条件に一致する処理を実行する構文で、以下のように記述します。

switch (値)
{
    case 値1:
        // 値が値1だったときの処理
        break;
    case 値2:
        // 値が値2だったときの処理
        break;
    default:
        // どのcaseにも当てはまらない場合の処理
        break;
}

breakは、そのcaseの処理が終わったらswitch文から抜けるという意味で、必ず指定する必要があります。(returnでも可)

以下は文字列の値によって表示するメッセージを変える例です。

string color = "red";

switch (color)
{
    case "red":
        Console.WriteLine("赤です");
        break;
    case "blue":
        Console.WriteLine("青です");
        break;
    case "green":
        Console.WriteLine("緑です");
        break;
    default:
        Console.WriteLine("その他の色です");
        break;
}

同じ処理をif文で書くと以下のようになります。

string color = "red";

if (color == "red")
{
    Console.WriteLine("赤です");
}
else if (color == "blue")
{
    Console.WriteLine("青です");
}
else if (color == "green")
{
    Console.WriteLine("緑です");
}
else
{
    Console.WriteLine("その他の色です");
}

このようにどちらでも同じ処理を書くことができますが、「値が何かによって処理を分ける」ときは、switch文を使ったほうが見やすくなります。

if文との使い分けについては、「複数のelse ifが続く場合はswitchを使う」ようにするのがおすすめです。

switch式(C# 8.0以降)

C# 8.0からは、switch式を使って値の分岐と代入を同時に行えるようになりました。

基本の形は以下の通りです。

変数 = 条件となる値 switch
{
    値1 => 値1に当てはまるときの結果,
    値2 => 値2に当てはまるときの結果,
    _   => どれにも当てはまらないときの結果
};

先ほどのコード例をswitch式で置き換えたものが次のコードです。

string color = "red";

string message = color switch
{
    "red"   => "赤です",
    "blue"  => "青です",
    "green" => "緑です",
    _       => "その他の色です"
};

Console.WriteLine(message);

一般的にswitch文よりもswitch式のほうが読みやすく、コードも短くなります。

C# 8.0以降であれば基本的にswitch式を使うようにしましょう。

三項演算子

三項演算子(条件演算子)は、if ~ else のような簡単な条件分岐を 1行で書ける便利な記法です。

基本の形は以下です。

条件式 ? 条件がtrueのときの値 : 条件がfalseのときの値;

次の例では、ageが18以上なら「成人です」、それ以外なら「未成年です」と表示されます。

int age = 20;
string message = age >= 18 ? "成人です" : "未成年です";

Console.WriteLine(message);

これをif ~ else を使って書くと次のようになります。

int age = 20;
string message;
if (age >= 18)
{
    message = "成人です";
}
else
{
    message = "未成年です";
}

Console.WriteLine(message);

このように、今回のような例であれば三項演算子を使うとコードがスッキリします。

三項演算子は慣れるとかなり便利な記法ですが、条件が複雑な場合は使用を避けるのが無難です。読みやすさを重視して、if文と使い分けるようにしてください。

条件の入れ子(ネスト)に注意

条件が複雑になってくると、処理の入れ子(ネスト)がどんどん深くなることがあります。

ネストが深いコードは、読みづらくなり、バグの原因にもなりやすいので注意が必要です。

以下はネストが深くなってしまった例です。

if (user != null)
{
    if (user.Name != "")
    {
        if (user.Age >= 18)
        {
            Console.WriteLine("このユーザーは利用可能です");
        }
    }
}

ネストが深くなりそうなときは、「処理を進められない条件があるなら、早めに抜けてしまう」という書き方が有効です。これをガード節と呼びます。

以下はガード節を使って書き直したものです。

if (user == null) return;
if (user.Name == "") return;
if (user.Age < 18) return;

Console.WriteLine("このユーザーは利用可能です");

ネストを浅くすることで、本当にやりたい処理(ここではConsole.WriteLine)だけが目立つ構成になります。

実務ではよく使われるテクニックなので覚えておきましょう。

まとめ

  • if文はシンプルかつ柔軟な条件判断が可能
  • switch文やswitch式は、値に応じた明快な分岐に適している
  • 三項演算子は便利だが複雑な条件の場合は注意する
  • ガード節を使ってネストが深くなるのを防ぐことで、コードが読みやすくなる

次回は「C#のループ構文」について解説します。

C#入門③|ループ構文(foreach・for・while)の基本

C#入門
hiranote

コメント

タイトルとURLをコピーしました