前回の「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("もう少しがんばりましょう");
}
このように、if
→ else if
→ else
の順で上から順番に条件を見ていき、最初に当てはまったものだけが実行されます。
つまり、どれか一つの処理だけが実行され、残りはスキップされます。
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#のループ構文」について解説します。