C#の条件分岐を完全理解|if文・else if・switch・三項演算子の書き方と使い分け
はじめに
C#でプログラムを書くうえで、条件分岐は必ず理解しておきたい基本文法です。条件分岐を使うと、「ユーザーがログインしている場合だけ処理する」「点数に応じて評価を変える」「入力された値によって処理を切り替える」といった判断をプログラムに組み込めます。
C#の条件分岐には、主にif文、else if、switch文、switch式、三項演算子があります。それぞれ書き方や向いている場面が異なるため、使い分けを理解することが重要です。
この記事では、C#の条件分岐について、初心者にもわかりやすく基本構文から実務での使い分けまで解説します。
1. C#の条件分岐とは
C#の条件分岐とは、条件に応じて実行する処理を切り替える仕組みです。
たとえば、次のような処理を考えてみます。
C#int score = 80;
if (score >= 60)
{
Console.WriteLine("合格です");
}
このコードでは、scoreが60以上であれば「合格です」と表示されます。60未満であれば、if文の中の処理は実行されません。
このように、条件によって処理の流れを変えることを「条件分岐」と呼びます。
1-1. 条件分岐でできること
条件分岐を使うと、プログラムに判断力を持たせることができます。
たとえば、以下のような処理を実現できます。
C#bool isLoggedIn = true;
if (isLoggedIn)
{
Console.WriteLine("マイページを表示します");
}
この例では、ログイン状態を表すisLoggedInがtrueの場合だけ、マイページを表示する処理を実行します。
C#の条件分岐は、Webアプリ、ゲーム、業務システム、コンソールアプリなど、あらゆる場面で使われます。ユーザー入力のチェック、エラー判定、権限確認、状態ごとの処理切り替えなど、実務でも頻繁に登場します。
1-2. 条件式がtrue/falseで判定される仕組み
C#の条件分岐では、条件式の結果がtrueかfalseで判定されます。
C#int age = 20;
if (age >= 18)
{
Console.WriteLine("成人です");
}
age >= 18という条件式は、ageが18以上であればtrue、18未満であればfalseになります。
上記の例では、ageが20なので条件式はtrueです。そのため、if文の中の処理が実行されます。
C#では、if文の条件式にはbool型の値が必要です。つまり、最終的にtrueまたはfalseになる式を書く必要があります。
1-3. C#で使う主な条件分岐の種類
C#でよく使う条件分岐には、以下のようなものがあります。
C#if
else
else if
switch
switch式
三項演算子
if文は、もっとも基本的な条件分岐です。単純な条件判定から複雑な条件まで幅広く使えます。
else ifは、複数の条件を順番に判定したいときに使います。
switch文は、ひとつの値に対して複数の分岐を作るときに便利です。
switch式は、値を返す条件分岐を簡潔に書けるモダンなC#の書き方です。
三項演算子は、簡単な条件によって代入する値を切り替えたいときに使います。
2. C#のif文の基本
if文は、C#の条件分岐の中でも最も基本的な構文です。条件が成り立つ場合だけ、指定した処理を実行します。
2-1. if文の基本構文
C#のif文は、次のように書きます。
C#if (条件式)
{
条件式がtrueの場合に実行する処理
}
具体例を見てみましょう。
C#int number = 10;
if (number > 0)
{
Console.WriteLine("正の数です");
}
このコードでは、number > 0がtrueであれば、Console.WriteLine("正の数です");が実行されます。
numberは10なので、条件式はtrueです。そのため、「正の数です」と表示されます。
2-2. 条件式の書き方
条件式には、trueまたはfalseになる式を書きます。
C#int age = 25;
if (age >= 20)
{
Console.WriteLine("20歳以上です");
}
この場合、age >= 20が条件式です。
また、bool型の変数をそのまま条件式に使うこともできます。
C#bool isMember = true;
if (isMember)
{
Console.WriteLine("会員です");
}
isMemberがtrueなので、if文の中の処理が実行されます。
反対に、falseの場合だけ処理したいときは、後述する!演算子を使います。
C#bool isDeleted = false;
if (!isDeleted)
{
Console.WriteLine("削除されていません");
}
2-3. if文でよく使う比較演算子
C#の条件分岐では、比較演算子をよく使います。
C#int a = 10;
int b = 20;
if (a == b)
{
Console.WriteLine("aとbは等しいです");
}
if (a != b)
{
Console.WriteLine("aとbは等しくありません");
}
if (a < b)
{
Console.WriteLine("aはbより小さいです");
}
if (b > a)
{
Console.WriteLine("bはaより大きいです");
}
if (a <= 10)
{
Console.WriteLine("aは10以下です");
}
if (b >= 20)
{
Console.WriteLine("bは20以上です");
}
よく使う比較演算子は次のとおりです。
==は等しい、!=は等しくない、>はより大きい、<はより小さい、>=は以上、<=は以下を表します。
特に初心者が間違えやすいのが、=と==の違いです。=は代入、==は比較です。
2-4. if文のサンプルコード
次は、入力された点数が合格点以上かどうかを判定するサンプルです。
C#int score = 75;
if (score >= 60)
{
Console.WriteLine("合格です");
}
scoreが60以上の場合、「合格です」と表示されます。
もう少し実用的な例として、在庫数を判定してみます。
C#int stock = 5;
if (stock > 0)
{
Console.WriteLine("商品を購入できます");
}
stockが0より大きい場合だけ、購入できるメッセージを表示します。
2-5. if文で初心者が間違えやすいポイント
C#のif文で初心者がよく間違えるポイントは、条件式の書き方と中括弧の扱いです。
たとえば、次のように==ではなく=を書いてしまうミスがあります。
C#int number = 10;
// 間違いの例
// if (number = 10)
// {
// Console.WriteLine("10です");
// }
C#では、number = 10は代入を意味します。比較したい場合はnumber == 10と書く必要があります。
C#int number = 10;
if (number == 10)
{
Console.WriteLine("10です");
}
また、条件式の後ろにセミコロンを付けてしまうミスにも注意が必要です。
C#int age = 15;
// 避けたい書き方
if (age >= 18);
{
Console.WriteLine("成人です");
}
このように書くと、if文の判定とブロックが意図した形で結びつきません。if文の条件式の直後には、基本的にセミコロンを書かないようにしましょう。
3. elseとelse ifの使い方
if文だけでは、「条件に当てはまる場合」の処理しか書けません。条件に当てはまらない場合や、複数の条件を順番に判定したい場合は、elseやelse ifを使います。
3-1. elseで条件に当てはまらない場合を処理する
elseは、ifの条件式がfalseだった場合に実行される処理を書きます。
C#int score = 50;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
このコードでは、score >= 60がtrueなら「合格です」、falseなら「不合格です」と表示されます。
elseを使うことで、「条件を満たす場合」と「条件を満たさない場合」の両方を明確に処理できます。
3-2. else ifで複数条件を分岐する
else ifは、複数の条件を順番に判定したいときに使います。
C#int score = 85;
if (score >= 90)
{
Console.WriteLine("評価はAです");
}
else if (score >= 80)
{
Console.WriteLine("評価はBです");
}
else if (score >= 70)
{
Console.WriteLine("評価はCです");
}
else
{
Console.WriteLine("評価はDです");
}
この場合、上から順番に条件が判定されます。
scoreは85なので、score >= 90はfalseです。次にscore >= 80が判定され、これはtrueなので「評価はBです」と表示されます。
一度どこかの条件に一致すると、それ以降のelse ifやelseは実行されません。
3-3. if・else if・elseの実践コード例
次は、年齢によって料金を分ける例です。
C#int age = 12;
if (age < 6)
{
Console.WriteLine("無料です");
}
else if (age < 13)
{
Console.WriteLine("子ども料金です");
}
else if (age < 65)
{
Console.WriteLine("大人料金です");
}
else
{
Console.WriteLine("シニア料金です");
}
このコードでは、年齢によって料金区分を切り替えています。
ageが12の場合、age < 6はfalseですが、age < 13はtrueです。そのため、「子ども料金です」と表示されます。
3-4. else ifを使うべき場面
else ifは、複数の条件のうち、どれか1つだけを実行したい場合に向いています。
たとえば、点数による評価、年齢による区分、金額による割引率、ステータスによる表示切り替えなどです。
C#int amount = 12000;
if (amount >= 10000)
{
Console.WriteLine("20%割引");
}
else if (amount >= 5000)
{
Console.WriteLine("10%割引");
}
else
{
Console.WriteLine("割引なし");
}
このように、条件に優先順位があり、上から順番に判定したい場合はelse ifが便利です。
3-5. 条件の順番で結果が変わるケース
else ifでは、条件の順番が非常に重要です。
次のコードを見てください。
C#int score = 95;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else if (score >= 90)
{
Console.WriteLine("高得点です");
}
このコードでは、scoreが95でも「合格です」と表示されます。なぜなら、最初のscore >= 60がtrueになった時点で、以降のelse ifは判定されないからです。
高得点を先に判定したい場合は、条件の順番を変える必要があります。
C#int score = 95;
if (score >= 90)
{
Console.WriteLine("高得点です");
}
else if (score >= 60)
{
Console.WriteLine("合格です");
}
範囲が重なる条件を書く場合は、より限定的な条件を先に書くのが基本です。
4. 複数条件を判定する論理演算子
C#では、複数の条件を組み合わせて判定できます。そのときに使うのが、論理演算子です。
代表的な論理演算子には、&&、||、!があります。
4-1. AND条件を表す&&
&&は、複数の条件がすべてtrueの場合にtrueになります。
C#int age = 25;
bool hasTicket = true;
if (age >= 18 && hasTicket)
{
Console.WriteLine("入場できます");
}
この例では、age >= 18とhasTicketの両方がtrueの場合だけ、「入場できます」と表示されます。
どちらか一方でもfalseであれば、if文の中の処理は実行されません。
4-2. OR条件を表す||
||は、複数の条件のうち、どれか1つでもtrueであればtrueになります。
C#bool isAdmin = false;
bool isOwner = true;
if (isAdmin || isOwner)
{
Console.WriteLine("編集できます");
}
この例では、isAdminまたはisOwnerのどちらかがtrueであれば、編集可能と判定します。
||は、「AまたはB」という条件を書きたいときに使います。
4-3. NOT条件を表す!
!は、条件の真偽を反転させる演算子です。
C#bool isLoggedIn = false;
if (!isLoggedIn)
{
Console.WriteLine("ログインしてください");
}
isLoggedInはfalseですが、!isLoggedInと書くことでtrueになります。
つまり、「ログインしていない場合」という条件を表せます。
4-4. 複数条件を組み合わせたif文の例
複数の条件を組み合わせると、より実用的な判定ができます。
C#int age = 20;
bool hasCoupon = true;
int amount = 3000;
if (age >= 18 && hasCoupon && amount >= 2000)
{
Console.WriteLine("クーポンを利用できます");
}
else
{
Console.WriteLine("クーポンを利用できません");
}
このコードでは、年齢が18歳以上、クーポンを持っている、購入金額が2000円以上という3つの条件をすべて満たす場合に、クーポンを利用できます。
&&と||を組み合わせる場合は、かっこを使うと読みやすくなります。
C#bool isMember = true;
bool isAdmin = false;
int purchaseCount = 5;
if (isAdmin || (isMember && purchaseCount >= 3))
{
Console.WriteLine("特別特典を利用できます");
}
この例では、管理者である、または会員かつ購入回数が3回以上の場合に特典を利用できます。
4-5. 条件式を読みやすく書くコツ
条件式が長くなると、コードが読みにくくなります。
たとえば、次のようなコードは意味を理解するのに少し時間がかかります。
C#if (age >= 18 && hasTicket && !isSuspended && amount >= 1000)
{
Console.WriteLine("利用可能です");
}
このような場合は、条件を変数に分けると読みやすくなります。
C#bool isAdult = age >= 18;
bool canUseService = isAdult && hasTicket && !isSuspended && amount >= 1000;
if (canUseService)
{
Console.WriteLine("利用可能です");
}
条件式を読む人が「何を判定しているのか」をすぐ理解できるように、意味のある変数名を付けることが大切です。
5. switch文の基本と使い方
switch文は、ひとつの値に対して複数の分岐を作りたいときに使います。
if文でも同じことはできますが、特定の値ごとに処理を分ける場合は、switch文のほうが読みやすくなることがあります。
5-1. switch文の基本構文
C#のswitch文は、次のように書きます。
C#switch (値)
{
case 値1:
処理1;
break;
case 値2:
処理2;
break;
default:
どのcaseにも一致しない場合の処理;
break;
}
switchのかっこの中に判定したい値を書き、caseごとに処理を分けます。
5-2. caseとdefaultの役割
caseは、指定した値に一致した場合の処理を表します。
C#string signal = "red";
switch (signal)
{
case "red":
Console.WriteLine("止まれ");
break;
case "blue":
Console.WriteLine("進め");
break;
case "yellow":
Console.WriteLine("注意");
break;
default:
Console.WriteLine("不明な信号です");
break;
}
このコードでは、signalの値が"red"なので、「止まれ」と表示されます。
defaultは、どのcaseにも一致しなかった場合に実行されます。if文におけるelseのような役割です。
5-3. breakが必要な理由
switch文では、各caseの処理の最後にbreakを書くのが基本です。
C#int day = 1;
switch (day)
{
case 1:
Console.WriteLine("月曜日");
break;
case 2:
Console.WriteLine("火曜日");
break;
default:
Console.WriteLine("不明な曜日");
break;
}
breakは、switch文の処理を抜けるために使います。
C#では、通常、caseの処理が次のcaseへそのまま流れる書き方はできません。そのため、各caseの最後にはbreak、return、throwなどで処理の終わりを明確にする必要があります。
5-4. switch文のサンプルコード
曜日番号から曜日名を表示する例を見てみましょう。
C#int dayOfWeek = 3;
switch (dayOfWeek)
{
case 1:
Console.WriteLine("月曜日");
break;
case 2:
Console.WriteLine("火曜日");
break;
case 3:
Console.WriteLine("水曜日");
break;
case 4:
Console.WriteLine("木曜日");
break;
case 5:
Console.WriteLine("金曜日");
break;
case 6:
Console.WriteLine("土曜日");
break;
case 7:
Console.WriteLine("日曜日");
break;
default:
Console.WriteLine("1〜7の数字を入力してください");
break;
}
このコードでは、dayOfWeekが3なので、「水曜日」と表示されます。
5-5. if文よりswitch文が向いているケース
switch文は、ひとつの値に対して複数の候補を比較する場合に向いています。
たとえば、以下のような場面です。
C#string role = "admin";
switch (role)
{
case "admin":
Console.WriteLine("管理者画面を表示します");
break;
case "user":
Console.WriteLine("ユーザー画面を表示します");
break;
case "guest":
Console.WriteLine("ゲスト画面を表示します");
break;
default:
Console.WriteLine("権限が不明です");
break;
}
このように、特定の値ごとに処理を切り替える場合は、if文を何度も書くよりswitch文のほうが見通しがよくなります。
6. switch式とパターンマッチング
C#では、従来のswitch文に加えて、より簡潔に値を返せるswitch式も使えます。また、パターンマッチングを使うことで、型や条件に応じた分岐も書けます。
6-1. switch式とは
switch式は、条件に応じて値を返すための構文です。
C#int day = 1;
string dayName = day switch
{
1 => "月曜日",
2 => "火曜日",
3 => "水曜日",
4 => "木曜日",
5 => "金曜日",
6 => "土曜日",
7 => "日曜日",
_ => "不明"
};
Console.WriteLine(dayName);
この例では、dayの値に応じてdayNameに文字列を代入しています。
_は、どの条件にも一致しない場合を表します。switch文のdefaultに近い役割です。
6-2. switch文とswitch式の違い
switch文は、条件に応じて処理を実行するための構文です。
C#switch (status)
{
case "active":
Console.WriteLine("有効です");
break;
default:
Console.WriteLine("無効です");
break;
}
一方、switch式は、条件に応じて値を返すための構文です。
C#string message = status switch
{
"active" => "有効です",
_ => "無効です"
};
処理を複数行で実行したい場合はswitch文、条件によって値を決めたい場合はswitch式が向いています。
6-3. パターンマッチングを使った条件分岐
パターンマッチングを使うと、値だけでなく、型や範囲に応じた条件分岐も書けます。
C#object value = 123;
if (value is int number)
{
Console.WriteLine($"整数です: {number}");
}
このコードでは、valueがint型であれば、その値をnumberとして使えます。
switch式でもパターンマッチングを使えます。
C#int score = 85;
string grade = score switch
{
>= 90 => "A",
>= 80 => "B",
>= 70 => "C",
>= 60 => "D",
_ => "F"
};
Console.WriteLine(grade);
この例では、点数の範囲に応じて評価を返しています。
6-4. when句で条件を追加する方法
when句を使うと、caseに追加条件を付けられます。
C#int number = 10;
switch (number)
{
case int n when n > 0:
Console.WriteLine("正の数です");
break;
case int n when n < 0:
Console.WriteLine("負の数です");
break;
case 0:
Console.WriteLine("ゼロです");
break;
}
このコードでは、numberが正の数か負の数かゼロかを判定しています。
when句を使うと、単純な値の一致だけでなく、より細かい条件を追加できます。
6-5. モダンなC#でのswitchの書き方
モダンなC#では、値を決めるだけの条件分岐ならswitch式を使うと簡潔に書けます。
C#string role = "admin";
string pageName = role switch
{
"admin" => "管理者ページ",
"user" => "ユーザーページ",
"guest" => "ゲストページ",
_ => "エラーページ"
};
従来のswitch文よりもコード量が少なく、代入処理も読みやすくなります。
ただし、複雑な処理を複数行で書く場合は、無理にswitch式にせず、switch文やif文を使ったほうがわかりやすいこともあります。
7. 三項演算子の書き方
三項演算子は、条件によって返す値を切り替えるための演算子です。簡単なif文を1行で書けるため、値の代入でよく使われます。
7-1. 三項演算子の基本構文
三項演算子は、次のように書きます。
C#条件式 ? trueの場合の値 : falseの場合の値
具体例を見てみましょう。
C#int score = 75;
string result = score >= 60 ? "合格" : "不合格";
Console.WriteLine(result);
score >= 60がtrueなら"合格"、falseなら"不合格"がresultに代入されます。
7-2. if文を三項演算子に書き換える例
まず、通常のif文で書いた例です。
C#int age = 20;
string message;
if (age >= 18)
{
message = "成人です";
}
else
{
message = "未成年です";
}
これを三項演算子で書くと、次のようになります。
C#int age = 20;
string message = age >= 18 ? "成人です" : "未成年です";
同じ処理でも、三項演算子を使うと短く書けます。
7-3. 三項演算子を使うメリット
三項演算子のメリットは、単純な条件分岐を簡潔に書けることです。
C#bool isMember = true;
int price = isMember ? 800 : 1000;
このコードでは、会員なら800円、会員でなければ1000円をpriceに代入しています。
値を代入するだけの簡単な条件分岐であれば、if文よりもスッキリ書けます。
7-4. 三項演算子を使いすぎると読みにくくなる理由
三項演算子は便利ですが、複雑な条件に使いすぎると読みにくくなります。
C#int score = 85;
string grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : "D";
このように三項演算子を入れ子にすると、条件の流れがわかりにくくなります。
この場合は、if文やswitch式を使ったほうが読みやすいです。
C#int score = 85;
string grade = score switch
{
>= 90 => "A",
>= 80 => "B",
>= 70 => "C",
_ => "D"
};
三項演算子は、短く書けることよりも、読みやすさを優先して使うことが大切です。
7-5. 三項演算子が向いているケース
三項演算子が向いているのは、条件によって値を1つ決めるだけのシンプルな場面です。
C#bool isEnabled = true;
string buttonText = isEnabled ? "有効" : "無効";
また、表示メッセージの切り替えにも向いています。
C#int stock = 0;
string stockMessage = stock > 0 ? "在庫あり" : "在庫なし";
条件が単純で、trueの場合とfalseの場合の値がすぐ理解できるなら、三項演算子を使うとコードが簡潔になります。
8. if文・switch文・三項演算子の使い分け
C#の条件分岐では、if文、switch文、三項演算子を状況に応じて使い分けることが大切です。
どれを使っても同じ処理を書ける場合がありますが、読みやすさや保守性を考えると、適切な構文を選ぶ必要があります。
8-1. 条件が少ない場合はif文
条件が1つ、または2つ程度の場合はif文がわかりやすいです。
C#int age = 20;
if (age >= 18)
{
Console.WriteLine("成人です");
}
else
{
Console.WriteLine("未成年です");
}
単純な比較や、複数条件を組み合わせた判定にはif文が向いています。
C#if (age >= 18 && hasLicense)
{
Console.WriteLine("運転できます");
}
条件式を自由に書けるため、柔軟性が高いのがif文の特徴です。
8-2. 複数の値で分岐する場合はswitch文
ひとつの変数の値によって処理を分ける場合は、switch文が向いています。
C#string command = "start";
switch (command)
{
case "start":
Console.WriteLine("開始します");
break;
case "stop":
Console.WriteLine("停止します");
break;
case "pause":
Console.WriteLine("一時停止します");
break;
default:
Console.WriteLine("不明なコマンドです");
break;
}
ifとelse ifを何度も並べるよりも、分岐の候補が見やすくなります。
8-3. 値を簡潔に代入する場合は三項演算子
条件によって代入する値を変えるだけなら、三項演算子が便利です。
C#int score = 80;
string result = score >= 60 ? "合格" : "不合格";
短く書けるため、単純な条件分岐には向いています。
ただし、処理が複雑になる場合はif文を使うほうが読みやすくなります。
8-4. 可読性を重視した使い分けの基準
条件分岐を選ぶときは、「短く書けるか」よりも「読みやすいか」を基準にしましょう。
たとえば、次のように考えると判断しやすくなります。
条件が複雑ならif文、ひとつの値で複数分岐するならswitch文、値を1つ返すだけなら三項演算子またはswitch式が向いています。
C#// 条件が複雑な場合
if (isMember && amount >= 5000 && !isExpired)
{
Console.WriteLine("割引できます");
}
// 値ごとに分岐する場合
switch (status)
{
case "active":
Console.WriteLine("有効");
break;
case "inactive":
Console.WriteLine("無効");
break;
}
// 値を代入するだけの場合
string label = isActive ? "有効" : "無効";
読み手が迷わず理解できる構文を選ぶことが、保守しやすいコードにつながります。
8-5. 実務でよくある使い分け例
実務では、条件分岐はさまざまな場面で使われます。
たとえば、入力チェックではif文がよく使われます。
C#if (string.IsNullOrEmpty(userName))
{
Console.WriteLine("ユーザー名を入力してください");
}
ステータスによる処理分岐では、switch文やswitch式が使いやすいです。
C#string status = "pending";
string message = status switch
{
"approved" => "承認済みです",
"rejected" => "却下されました",
"pending" => "確認中です",
_ => "不明な状態です"
};
表示用の文字列やフラグを簡単に切り替える場合は、三項演算子が便利です。
C#bool isPublished = true;
string label = isPublished ? "公開中" : "下書き";
このように、目的に合わせて条件分岐を選ぶことが重要です。
9. C#の条件分岐でよくあるエラーと対処法
C#の条件分岐は基本文法ですが、初心者がつまずきやすいポイントも多くあります。ここでは、よくあるエラーと対処法を紹介します。
9-1. =と==を間違える
=は代入、==は比較です。
C#int number = 10;
// 正しい比較
if (number == 10)
{
Console.WriteLine("10です");
}
変数に値を入れるときは=、値が等しいか調べるときは==を使います。
C#number = 20; // 代入
number == 20; // 比較
条件式では比較をしたいことが多いため、==を使う場面がよくあります。
9-2. 中括弧{}の付け忘れ
C#では、if文の処理が1行だけの場合、中括弧を省略できます。
C#if (score >= 60)
Console.WriteLine("合格です");
しかし、初心者のうちは中括弧を付けることをおすすめします。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
中括弧を省略すると、後から処理を追加したときに意図しない動作になることがあります。
C#if (score >= 60)
Console.WriteLine("合格です");
Console.WriteLine("次の試験も頑張りましょう");
この場合、2行目のConsole.WriteLineはif文の条件に関係なく実行されます。ミスを防ぐためにも、基本的には中括弧を書く習慣を付けましょう。
9-3. 条件式が常にtrue/falseになる
条件式の書き方によっては、常にtrueまたは常にfalseになることがあります。
C#int age = 20;
if (age >= 0 || age <= 120)
{
Console.WriteLine("年齢の範囲内です");
}
この条件は、ほとんどの場合trueになります。年齢が200でもage >= 0がtrueなので、全体がtrueになるからです。
正しくは、&&を使います。
C#int age = 20;
if (age >= 0 && age <= 120)
{
Console.WriteLine("年齢の範囲内です");
}
条件を組み合わせるときは、&&と||の違いを意識しましょう。
9-4. null判定を忘れる
C#では、変数がnullになる可能性がある場合、条件分岐で事前にチェックすることが重要です。
C#string? name = null;
if (name != null)
{
Console.WriteLine(name.Length);
}
nameがnullのままname.Lengthを呼び出すと、エラーの原因になります。
文字列がnullまたは空文字かどうかを確認したい場合は、string.IsNullOrEmptyが便利です。
C#string? name = "";
if (string.IsNullOrEmpty(name))
{
Console.WriteLine("名前が入力されていません");
}
空白だけの文字列もチェックしたい場合は、string.IsNullOrWhiteSpaceを使います。
C#string? name = " ";
if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("名前を正しく入力してください");
}
9-5. switch文でdefaultを書き忘れる
switch文では、どのcaseにも一致しなかった場合に備えてdefaultを書くのがおすすめです。
C#string status = "unknown";
switch (status)
{
case "active":
Console.WriteLine("有効です");
break;
case "inactive":
Console.WriteLine("無効です");
break;
default:
Console.WriteLine("不明なステータスです");
break;
}
defaultを書いておくことで、想定外の値が来た場合にも安全に処理できます。
特に、外部入力やユーザー入力を扱う場合は、想定外の値が入る可能性を考えておくことが大切です。
10. 条件分岐を読みやすく書くコツ
条件分岐は便利ですが、書き方によってはコードが複雑になりやすいです。読みやすく保守しやすいコードにするためには、いくつかのコツがあります。
10-1. ネストを深くしすぎない
if文の中にさらにif文を書くことをネストといいます。
C#if (isLoggedIn)
{
if (isAdmin)
{
if (hasPermission)
{
Console.WriteLine("管理画面を表示します");
}
}
}
ネストが深くなると、処理の流れがわかりにくくなります。
このような場合は、条件をまとめたり、早期returnを使ったりして、ネストを浅くするのがポイントです。
C#if (isLoggedIn && isAdmin && hasPermission)
{
Console.WriteLine("管理画面を表示します");
}
10-2. 早期returnで処理をシンプルにする
メソッド内では、条件を満たさない場合に早めにreturnすることで、コードをシンプルにできます。
C#void ShowAdminPage(bool isLoggedIn, bool isAdmin)
{
if (!isLoggedIn)
{
Console.WriteLine("ログインしてください");
return;
}
if (!isAdmin)
{
Console.WriteLine("権限がありません");
return;
}
Console.WriteLine("管理画面を表示します");
}
このように書くと、エラー条件を先に処理できるため、メインの処理が読みやすくなります。
ネストを深くしないためにも、早期returnは実務でよく使われます。
10-3. 条件式を変数やメソッドに分ける
条件式が長くなる場合は、変数やメソッドに分けると読みやすくなります。
C#bool canDiscount = isMember && amount >= 5000 && !isExpired;
if (canDiscount)
{
Console.WriteLine("割引を適用します");
}
さらに、判定ロジックが複雑な場合はメソッドに分けると保守しやすくなります。
C#bool CanUseCoupon(bool isMember, int amount, bool isExpired)
{
return isMember && amount >= 5000 && !isExpired;
}
if (CanUseCoupon(isMember, amount, isExpired))
{
Console.WriteLine("クーポンを利用できます");
}
メソッド名を見れば何を判定しているかがわかるため、コードの意図が伝わりやすくなります。
10-4. 複雑な条件はコメントで補足する
条件式がどうしても複雑になる場合は、コメントで補足すると理解しやすくなります。
C#// 会員で、購入金額が5000円以上、かつクーポンが有効期限内の場合に割引を適用する
if (isMember && amount >= 5000 && !isExpired)
{
Console.WriteLine("割引を適用します");
}
ただし、コメントに頼りすぎるのではなく、変数名やメソッド名で意味が伝わるように書くことも大切です。
C#bool canApplyDiscount = isMember && amount >= 5000 && !isExpired;
if (canApplyDiscount)
{
Console.WriteLine("割引を適用します");
}
このように、コード自体を読みやすくしたうえで、必要に応じてコメントを追加しましょう。
10-5. 保守しやすい条件分岐の書き方
保守しやすい条件分岐を書くには、条件の意味を明確にすることが重要です。
C#if (user.IsActive && !user.IsDeleted && user.Role == "Admin")
{
Console.WriteLine("管理者として利用できます");
}
このような条件が何度も出てくる場合は、メソッドに切り出すとよいです。
C#bool IsAvailableAdmin(User user)
{
return user.IsActive && !user.IsDeleted && user.Role == "Admin";
}
if (IsAvailableAdmin(user))
{
Console.WriteLine("管理者として利用できます");
}
同じ条件を複数箇所に直接書くと、修正が必要になったときに漏れが発生しやすくなります。条件分岐は、重複を避けて、意味のある単位に整理することが大切です。
11. C#の条件分岐に関するよくある質問
ここでは、C#の条件分岐について初心者が疑問に感じやすいポイントを解説します。
11-1. if文とswitch文はどちらを使うべきか
条件式を自由に書きたい場合はif文、ひとつの値に対して複数の候補で分岐したい場合はswitch文が向いています。
たとえば、年齢や金額の範囲を判定する場合はif文が使いやすいです。
C#if (age >= 18 && amount >= 1000)
{
Console.WriteLine("利用できます");
}
一方、ステータスやコマンドのように、特定の値で分岐する場合はswitch文が読みやすくなります。
C#switch (status)
{
case "active":
Console.WriteLine("有効");
break;
case "inactive":
Console.WriteLine("無効");
break;
default:
Console.WriteLine("不明");
break;
}
11-2. elseは必ず書く必要があるのか
elseは必ず書く必要はありません。
条件を満たす場合だけ処理したいなら、if文だけで十分です。
C#if (isError)
{
Console.WriteLine("エラーが発生しました");
}
ただし、条件を満たさない場合にも何らかの処理が必要なら、elseを書きます。
C#if (isError)
{
Console.WriteLine("エラーが発生しました");
}
else
{
Console.WriteLine("正常に処理されました");
}
処理の意図に応じて、elseを書くかどうかを判断しましょう。
11-3. 三項演算子は実務で使ってもよいのか
三項演算子は実務でもよく使われます。
ただし、使う場面はシンプルな条件分岐に限るのがおすすめです。
C#string label = isActive ? "有効" : "無効";
このように、条件によって値を1つ決めるだけなら、三項演算子は読みやすく便利です。
一方で、条件が複雑だったり、三項演算子を入れ子にしたりすると読みにくくなります。その場合はif文やswitch式を使うほうがよいでしょう。
11-4. switch文で複数条件は書けるのか
C#のswitch文では、パターンマッチングやwhen句を使うことで複数条件を扱えます。
C#int score = 85;
switch (score)
{
case int n when n >= 90:
Console.WriteLine("A");
break;
case int n when n >= 80:
Console.WriteLine("B");
break;
case int n when n >= 70:
Console.WriteLine("C");
break;
default:
Console.WriteLine("D");
break;
}
ただし、条件が複雑すぎる場合は、if文のほうが自然に書けることもあります。
C#if (score >= 80 && attendanceRate >= 90)
{
Console.WriteLine("優秀です");
}
複数条件を書くことはできますが、読みやすさを考えてif文と使い分けましょう。
11-5. C#初心者はどの条件分岐から覚えるべきか
C#初心者は、まずif文から覚えるのがおすすめです。
if文は、条件分岐の基本であり、C#のさまざまなコードで使われます。if、else、else if、比較演算子、論理演算子を理解すると、基本的な条件分岐は書けるようになります。
その次に、switch文を覚えると、複数の値で分岐するコードを書きやすくなります。
最後に、三項演算子やswitch式を学ぶと、より簡潔でモダンなC#の書き方ができるようになります。
まとめ
C#の条件分岐は、プログラムの流れを制御するための重要な文法です。
最も基本となるのはif文です。条件式がtrueの場合に処理を実行し、elseやelse ifを組み合わせることで、条件に当てはまらない場合や複数条件の分岐も書けます。
複数の条件を組み合わせたい場合は、&&、||、!といった論理演算子を使います。条件式が長くなる場合は、変数やメソッドに分けると読みやすくなります。
ひとつの値に対して複数の候補で分岐する場合は、switch文が便利です。値を返すだけの分岐であれば、switch式を使うと簡潔に書けます。
また、簡単な条件で値を代入するだけなら、三項演算子も有効です。ただし、複雑な条件に使いすぎると読みにくくなるため、可読性を重視して使い分けることが大切です。
C#の条件分岐を正しく理解すれば、ユーザー入力のチェック、ステータス判定、エラー処理、画面表示の切り替えなど、さまざまな処理を柔軟に書けるようになります。まずはif文の基本をしっかり身につけ、次にelse if、switch文、switch式、三項演算子へと学習を広げていきましょう。

