C#条件分岐の使い方を初心者向けに解説!if・switch・三項演算子の違いと実践例
はじめに
C#でプログラムを書くとき、ほぼ必ず使う基本構文のひとつが「条件分岐」です。条件分岐を使うと、「点数が60点以上なら合格と表示する」「ログイン情報が正しければ画面を表示する」「選ばれたメニュー番号によって処理を変える」といった処理を作れます。
C#の条件分岐には、主にif文、switch文、三項演算子があります。それぞれ書き方や向いている場面が異なるため、初心者のうちは「どれを使えばいいのか分からない」と感じることもあるでしょう。
この記事では、C#条件分岐の基本から、if、switch、三項演算子の違い、実践的なサンプルコード、初心者がつまずきやすいポイントまで分かりやすく解説します。C#を学び始めたばかりの方でも理解できるように、ひとつずつ丁寧に見ていきましょう。
1. C#の条件分岐とは?初心者が最初に押さえる基本
C#の条件分岐とは、条件によって実行する処理を変えるための仕組みです。プログラムは上から順番に処理を実行していきますが、条件分岐を使うことで「この場合だけ実行する」「条件に当てはまらなければ別の処理をする」といった柔軟な動きを作れます。
たとえば、ユーザーの年齢によって表示するメッセージを変えたり、入力された点数によって合格・不合格を判定したりできます。C#条件分岐は、アプリ開発、ゲーム開発、Webシステム、業務システムなど、あらゆる場面で使われる重要な基本です。
1-1. 条件分岐は「条件によって処理を変える」ための書き方
条件分岐を一言で表すと、「もし〇〇なら△△する」という処理です。
たとえば、日常生活でも条件分岐に近い判断をしています。
「雨が降っていたら傘を持っていく」
「お金が足りていたら商品を買う」
「パスワードが正しければログインできる」
これをC#のプログラムで表現すると、次のようになります。
C#bool isRainy = true;
if (isRainy)
{
Console.WriteLine("傘を持っていきましょう");
}
このコードでは、isRainyがtrueの場合だけ、Console.WriteLineの処理が実行されます。条件によって実行する処理が変わるため、これを条件分岐と呼びます。
1-2. C#で使う主な条件分岐はif・switch・三項演算子
C#でよく使う条件分岐には、主に次の3つがあります。
| 種類 | 主な用途 |
|---|---|
| if文 | 条件によって処理を分ける基本的な書き方 |
| switch文 | 1つの値に対して複数のパターンを分ける書き方 |
| 三項演算子 | 条件によって代入する値や返す値を短く書く方法 |
初心者が最初に覚えるべきなのはif文です。if文はもっとも基本的で、複雑な条件にも対応しやすいからです。
switch文は、曜日やメニュー番号のように、1つの値に対して複数の処理を分けたいときに便利です。三項演算子は、短い条件分岐を1行で書きたいときに使います。
1-3. 条件式はtrue/falseで判定される
C#の条件分岐では、条件式の結果がtrueかfalseで判定されます。
たとえば、次のコードを見てみましょう。
C#int score = 80;
if (score >= 60)
{
Console.WriteLine("合格です");
}
score >= 60という条件式は、「scoreが60以上かどうか」を判定しています。scoreは80なので、この条件式はtrueになります。そのため、合格ですと表示されます。
もしscoreが50だった場合、score >= 60はfalseになるため、ifの中の処理は実行されません。
C#int score = 50;
if (score >= 60)
{
Console.WriteLine("合格です");
}
このように、C#条件分岐では条件式がtrueなら処理を実行し、falseなら実行しない、という考え方が基本になります。
1-4. 条件分岐を学ぶと作れる処理の例
C#条件分岐を使えるようになると、次のような処理を作れるようになります。
C#int age = 18;
if (age >= 20)
{
Console.WriteLine("成人です");
}
else
{
Console.WriteLine("未成年です");
}
C#int menu = 2;
switch (menu)
{
case 1:
Console.WriteLine("新規作成");
break;
case 2:
Console.WriteLine("保存");
break;
case 3:
Console.WriteLine("終了");
break;
default:
Console.WriteLine("無効なメニューです");
break;
}
C#int score = 75;
string result = score >= 60 ? "合格" : "不合格";
Console.WriteLine(result);
このように、条件分岐はプログラムに判断力を持たせるための大切な仕組みです。
2. C#のif文の使い方
C#条件分岐の中でも、もっとも基本になるのがif文です。if文は「条件が成り立つときだけ処理を実行する」ために使います。
初心者のうちは、まずif文をしっかり理解することが大切です。if文を理解できれば、elseやelse ifを使った複数条件の分岐も自然に理解しやすくなります。
2-1. if文の基本構文
C#のif文の基本構文は次のとおりです。
C#if (条件式)
{
条件式がtrueのときに実行する処理
}
ifの後ろに丸かっこを書き、その中に条件式を書きます。そして、波かっこ{ }の中に、条件がtrueの場合に実行したい処理を書きます。
具体例を見てみましょう。
C#int score = 80;
if (score >= 60)
{
Console.WriteLine("合格です");
}
このコードでは、score >= 60が条件式です。scoreは80なので、条件はtrueになり、合格ですと表示されます。
2-2. if文で条件がtrueのときだけ処理を実行する
if文では、条件式がtrueの場合だけ中の処理が実行されます。
C#int temperature = 30;
if (temperature >= 25)
{
Console.WriteLine("暑い日です");
}
この例では、temperatureが25以上であれば、暑い日ですと表示されます。temperatureが20の場合は、条件式がfalseになるため、何も表示されません。
C#int temperature = 20;
if (temperature >= 25)
{
Console.WriteLine("暑い日です");
}
このように、if文は「条件に当てはまる場合だけ処理をしたい」ときに使います。
2-3. elseで条件に当てはまらない場合の処理を書く
elseを使うと、ifの条件に当てはまらなかった場合の処理を書けます。
C#int score = 50;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
このコードでは、score >= 60がtrueなら合格です、falseなら不合格ですと表示されます。
elseは「それ以外の場合」という意味です。条件に当てはまる場合と当てはまらない場合で処理を分けたいときに使います。
2-4. else ifで複数条件を分岐する
条件が2つだけでなく、3つ以上ある場合はelse ifを使います。
C#int score = 85;
if (score >= 90)
{
Console.WriteLine("評価はAです");
}
else if (score >= 70)
{
Console.WriteLine("評価はBです");
}
else if (score >= 60)
{
Console.WriteLine("評価はCです");
}
else
{
Console.WriteLine("評価はDです");
}
この例では、点数によって評価を変えています。scoreが85の場合、最初のscore >= 90はfalseですが、次のscore >= 70はtrueなので、評価はBですと表示されます。
else ifは上から順番に判定されます。一度条件がtrueになると、そのブロックの処理だけが実行され、それ以降の条件は判定されません。
2-5. if文のサンプルコード:年齢で表示メッセージを変える
次は、年齢によって表示メッセージを変えるサンプルです。
C#int age = 18;
if (age >= 20)
{
Console.WriteLine("成人です");
}
else if (age >= 13)
{
Console.WriteLine("10代です");
}
else
{
Console.WriteLine("子どもです");
}
実行結果は次のようになります。
10代です
このコードでは、まずage >= 20を判定します。ageは18なのでfalseです。次にage >= 13を判定します。これはtrueなので、10代ですと表示されます。
このようにif、else if、elseを組み合わせることで、複数の条件を分かりやすく書けます。
2-6. if文でよく使う比較演算子
if文では、条件式を書くときに比較演算子をよく使います。
| 演算子 | 意味 | 例 |
|---|---|---|
== | 等しい | score == 100 |
!= | 等しくない | score != 0 |
> | より大きい | score > 60 |
< | より小さい | score < 60 |
>= | 以上 | score >= 60 |
<= | 以下 | score <= 100 |
たとえば、次のように使います。
C#int score = 100;
if (score == 100)
{
Console.WriteLine("満点です");
}
==は「等しいかどうか」を判定する演算子です。代入に使う=とは意味が違うため、初心者は特に注意しましょう。
3. C#の条件式で使う演算子
C#条件分岐では、条件式の書き方がとても重要です。条件式が正しく書けていないと、意図した処理が実行されなかったり、エラーになったりします。
ここでは、if文やwhile文などでもよく使う比較演算子と論理演算子を解説します。条件分岐を使いこなすには、これらの演算子を理解しておくことが欠かせません。
3-1. 比較演算子:==・!=・>・<・>=・<=
比較演算子は、2つの値を比較して、結果をtrueまたはfalseで返す演算子です。
C#int a = 10;
int b = 20;
Console.WriteLine(a == b); // False
Console.WriteLine(a != b); // True
Console.WriteLine(a < b); // True
Console.WriteLine(a > b); // False
それぞれの意味は次のとおりです。
| 演算子 | 意味 |
|---|---|
== | 左辺と右辺が等しい |
!= | 左辺と右辺が等しくない |
> | 左辺が右辺より大きい |
< | 左辺が右辺より小さい |
>= | 左辺が右辺以上 |
<= | 左辺が右辺以下 |
条件式は、必ずtrueまたはfalseとして評価されます。
C#int age = 25;
if (age >= 20)
{
Console.WriteLine("成人です");
}
この場合、age >= 20はtrueなので、処理が実行されます。
3-2. 論理演算子:&&・||・!
論理演算子は、複数の条件を組み合わせるときに使います。
| 演算子 | 意味 | 例 |
|---|---|---|
&& | かつ | age >= 20 && hasTicket |
| ` | ` | |
! | 否定 | !isDeleted |
&&は、複数の条件がすべてtrueのときだけtrueになります。
C#int age = 25;
bool hasTicket = true;
if (age >= 20 && hasTicket)
{
Console.WriteLine("入場できます");
}
この例では、age >= 20とhasTicketの両方がtrueなので、入場できますと表示されます。
||は、どちらか一方でもtrueならtrueになります。
C#bool isMember = false;
bool hasCoupon = true;
if (isMember || hasCoupon)
{
Console.WriteLine("割引が適用されます");
}
この場合、isMemberはfalseですが、hasCouponがtrueなので、条件全体はtrueになります。
!は真偽値を反転します。
C#bool isDeleted = false;
if (!isDeleted)
{
Console.WriteLine("データは有効です");
}
isDeletedはfalseですが、!isDeletedによってtrueになるため、処理が実行されます。
3-3. 複数条件を組み合わせる書き方
実際のプログラムでは、複数の条件を組み合わせることがよくあります。
C#int score = 85;
int attendanceRate = 90;
if (score >= 60 && attendanceRate >= 80)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
この例では、点数が60点以上で、かつ出席率が80%以上の場合に合格としています。どちらか一方でも条件を満たしていなければ不合格です。
複雑な条件を書くときは、丸かっこを使って分かりやすくできます。
C#bool isMember = true;
bool hasCoupon = false;
int totalPrice = 12000;
if ((isMember || hasCoupon) && totalPrice >= 10000)
{
Console.WriteLine("特別割引が適用されます");
}
この条件では、「会員またはクーポンを持っている」かつ「購入金額が10000円以上」の場合に割引が適用されます。
3-4. 条件式を書くときの注意点
条件式を書くときは、読みやすさと正確さを意識することが大切です。
悪い例を見てみましょう。
C#if (score >= 60 && attendanceRate >= 80 && reportSubmitted && !isSuspended)
{
Console.WriteLine("合格です");
}
このコード自体は動きますが、条件が長くなると意味を読み取りにくくなります。その場合は、条件の意味を変数に分けると読みやすくなります。
C#bool hasEnoughScore = score >= 60;
bool hasEnoughAttendance = attendanceRate >= 80;
bool canPass = hasEnoughScore && hasEnoughAttendance && reportSubmitted && !isSuspended;
if (canPass)
{
Console.WriteLine("合格です");
}
このように、条件式の意味が分かる変数名を使うと、コード全体が読みやすくなります。
3-5. 初心者が間違えやすい「=」と「==」の違い
C#初心者がよく間違えるのが、=と==の違いです。
=は代入です。右側の値を左側の変数に入れるときに使います。
C#int score = 80;
一方、==は比較です。左辺と右辺が等しいかどうかを判定します。
C#if (score == 80)
{
Console.WriteLine("80点です");
}
ifの条件式で「等しいかどうか」を判定したい場合は、必ず==を使います。
C#int score = 80;
// 正しい書き方
if (score == 80)
{
Console.WriteLine("80点です");
}
=と==を混同すると、エラーや意図しない動作の原因になります。条件分岐では「比較には==、代入には=」と覚えておきましょう。
4. C#のswitch文の使い方
switch文は、1つの値に対して複数のパターンを分けたいときに使う条件分岐です。たとえば、曜日ごとに処理を変える、メニュー番号ごとに処理を変える、入力された文字列によって処理を分けるといった場合に便利です。
if文でも同じ処理は書けますが、条件が「同じ変数の値によって分かれる」場合は、switch文の方が読みやすくなることがあります。
4-1. switch文の基本構文
C#のswitch文の基本構文は次のとおりです。
C#switch (値)
{
case 値1:
処理1;
break;
case 値2:
処理2;
break;
default:
どのcaseにも当てはまらない場合の処理;
break;
}
switchの丸かっこの中に判定したい値を書きます。そして、caseごとに値を指定し、その値に一致した場合の処理を書きます。
簡単な例を見てみましょう。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("番号は1です");
break;
case 2:
Console.WriteLine("番号は2です");
break;
default:
Console.WriteLine("1でも2でもありません");
break;
}
この場合、numberは1なので、番号は1ですと表示されます。
4-2. caseで値ごとの処理を分ける
caseは、switchで判定する値と一致した場合に実行される処理を表します。
C#string color = "red";
switch (color)
{
case "red":
Console.WriteLine("赤です");
break;
case "blue":
Console.WriteLine("青です");
break;
case "green":
Console.WriteLine("緑です");
break;
}
この例では、colorが"red"なので、赤ですと表示されます。
C#のswitch文では、整数だけでなく文字列も使えます。メニュー名や状態名など、文字列によって処理を分けたい場合にも便利です。
4-3. defaultでどのcaseにも当てはまらない場合を処理する
defaultは、どのcaseにも一致しなかった場合に実行される処理です。
C#int menu = 9;
switch (menu)
{
case 1:
Console.WriteLine("新規作成");
break;
case 2:
Console.WriteLine("保存");
break;
case 3:
Console.WriteLine("終了");
break;
default:
Console.WriteLine("無効なメニュー番号です");
break;
}
このコードでは、menuが1、2、3のどれにも一致しないため、defaultの処理が実行されます。
defaultは必須ではありませんが、想定外の値が入ったときの処理を書いておくと、安全で分かりやすいコードになります。
4-4. breakを書き忘れるとどうなるか
switch文では、各caseの最後にbreakを書くのが基本です。breakは、switch文の処理を抜けるために使います。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
}
C#では、通常、caseの処理を書いたあとにbreakなどで終了しないとコンパイルエラーになる場合があります。これは、意図しない処理の流れを防ぐためです。
ただし、複数のcaseで同じ処理をしたい場合は、次のように書けます。
C#int number = 2;
switch (number)
{
case 1:
case 2:
case 3:
Console.WriteLine("1から3のどれかです");
break;
default:
Console.WriteLine("それ以外です");
break;
}
この例では、numberが1、2、3のいずれかであれば同じ処理が実行されます。
4-5. switch文のサンプルコード:曜日ごとに処理を変える
曜日によって表示するメッセージを変えるサンプルコードです。
C#string day = "Monday";
switch (day)
{
case "Monday":
Console.WriteLine("週の始まりです");
break;
case "Friday":
Console.WriteLine("週末が近いです");
break;
case "Saturday":
case "Sunday":
Console.WriteLine("休日です");
break;
default:
Console.WriteLine("平日です");
break;
}
dayが"Monday"なので、実行結果は次のようになります。
週の始まりです
このように、1つの値に対して複数のパターンを分けたい場合、switch文はとても分かりやすく書けます。
4-6. switch文が向いているケース
switch文が向いているのは、次のようなケースです。
| ケース | 例 |
|---|---|
| 1つの値に対して複数パターンがある | メニュー番号、曜日、状態 |
| 条件が単純な値の一致である | menu == 1、day == "Monday" |
else ifが多くなりすぎる | 5個以上の分岐など |
| 同じ変数を何度も比較している | type == "A"、type == "B" |
たとえば、次のようなif文はswitch文にすると読みやすくなります。
C#if (menu == 1)
{
Console.WriteLine("新規作成");
}
else if (menu == 2)
{
Console.WriteLine("保存");
}
else if (menu == 3)
{
Console.WriteLine("終了");
}
else
{
Console.WriteLine("無効なメニューです");
}
switch文に書き換えると、どの値でどの処理が実行されるかが見やすくなります。
C#switch (menu)
{
case 1:
Console.WriteLine("新規作成");
break;
case 2:
Console.WriteLine("保存");
break;
case 3:
Console.WriteLine("終了");
break;
default:
Console.WriteLine("無効なメニューです");
break;
}
5. C#の三項演算子の使い方
三項演算子は、条件分岐を短く書くための演算子です。if文と同じように条件によって処理を分けられますが、主に「条件によって代入する値を変える」ときに使います。
ただし、三項演算子は便利な反面、使いすぎるとコードが読みにくくなります。初心者のうちは、まずif文を理解したうえで、単純な条件にだけ三項演算子を使うのがおすすめです。
5-1. 三項演算子とは
三項演算子とは、次のように3つの要素を使って条件分岐を書く演算子です。
C#条件式 ? trueの場合の値 : falseの場合の値
?と:を使うのが特徴です。
たとえば、点数が60点以上なら"合格"、そうでなければ"不合格"という文字列を変数に代入する場合、次のように書けます。
C#int score = 80;
string result = score >= 60 ? "合格" : "不合格";
Console.WriteLine(result);
実行結果は次のとおりです。
合格
5-2. 三項演算子の基本構文
三項演算子の基本構文は次のとおりです。
C#変数 = 条件式 ? 条件がtrueのときの値 : 条件がfalseのときの値;
具体例を見てみましょう。
C#int age = 18;
string message = age >= 20 ? "成人です" : "未成年です";
Console.WriteLine(message);
age >= 20がtrueなら"成人です"、falseなら"未成年です"がmessageに代入されます。
この例ではageが18なので、実行結果は次のようになります。
未成年です
5-3. if文を三項演算子に書き換える例
まず、if文で書いた例を見てみましょう。
C#int score = 75;
string result;
if (score >= 60)
{
result = "合格";
}
else
{
result = "不合格";
}
Console.WriteLine(result);
このコードは、三項演算子を使うと次のように短く書けます。
C#int score = 75;
string result = score >= 60 ? "合格" : "不合格";
Console.WriteLine(result);
どちらも同じ結果になります。
三項演算子は、条件によって変数に代入する値を変えるだけなら、とても簡潔に書けます。
5-4. 三項演算子が向いているケース
三項演算子が向いているのは、次のようなケースです。
| 向いているケース | 例 |
|---|---|
| 条件が単純 | score >= 60 |
| trueとfalseで返す値が明確 | "合格"または"不合格" |
| 変数への代入だけで済む | string result = ... |
| 1行で書いても読みやすい | 短い条件分岐 |
たとえば、次のような処理は三項演算子に向いています。
C#int stock = 5;
string status = stock > 0 ? "在庫あり" : "在庫なし";
Console.WriteLine(status);
このように、条件によって表示用の文字列を変える程度であれば、三項演算子を使うとコードがすっきりします。
5-5. 三項演算子を使いすぎると読みにくくなる理由
三項演算子は便利ですが、複雑な条件に使うと読みにくくなります。
たとえば、次のコードは分かりにくい例です。
C#int score = 85;
string rank = score >= 90 ? "A" : score >= 70 ? "B" : score >= 60 ? "C" : "D";
このように三項演算子を何重にも重ねると、どの条件でどの値になるのかが分かりにくくなります。
この場合は、if文で書いた方が読みやすいです。
C#int score = 85;
string rank;
if (score >= 90)
{
rank = "A";
}
else if (score >= 70)
{
rank = "B";
}
else if (score >= 60)
{
rank = "C";
}
else
{
rank = "D";
}
三項演算子は、短く書くことよりも、読みやすさを優先して使いましょう。
5-6. 三項演算子のサンプルコード:条件によって代入する値を変える
次は、会員かどうかによって割引率を変えるサンプルです。
C#bool isMember = true;
double discountRate = isMember ? 0.1 : 0.0;
Console.WriteLine($"割引率は{discountRate * 100}%です");
実行結果は次のようになります。
割引率は10%です
isMemberがtrueなら0.1、falseなら0.0がdiscountRateに代入されます。
このように、三項演算子は「条件によって値を選ぶ」場面で使うと便利です。
6. if・switch・三項演算子の違いと使い分け
C#条件分岐には、if文、switch文、三項演算子があります。それぞれ役割が似ているため、初心者は「どれを使えばいいのか」と迷いやすいです。
結論から言うと、複雑な条件にはif文、1つの値に対して複数パターンを分けるならswitch文、単純な条件で値を返すだけなら三項演算子が向いています。
6-1. if文・switch文・三項演算子の比較表
| 種類 | 特徴 | 向いている場面 |
|---|---|---|
| if文 | 条件を自由に書ける | 複雑な条件、範囲判定、複数条件 |
| switch文 | 1つの値に対する分岐が見やすい | メニュー番号、曜日、状態ごとの処理 |
| 三項演算子 | 条件分岐を短く書ける | 単純な条件で値を代入する場合 |
それぞれの特徴を理解しておくと、場面に応じて読みやすいコードを書けるようになります。
6-2. 複雑な条件にはif文を使う
複雑な条件にはif文が向いています。
たとえば、点数と出席率の両方を判定する場合です。
C#int score = 75;
int attendanceRate = 85;
if (score >= 60 && attendanceRate >= 80)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
if文は、比較演算子や論理演算子を自由に組み合わせられるため、柔軟な条件分岐ができます。
また、範囲判定にも向いています。
C#int temperature = 28;
if (temperature >= 30)
{
Console.WriteLine("とても暑いです");
}
else if (temperature >= 20)
{
Console.WriteLine("過ごしやすい気温です");
}
else
{
Console.WriteLine("寒いです");
}
このように、範囲や複数条件を扱う場合はif文を使うと分かりやすく書けます。
6-3. 1つの値に対して複数パターンを分けるならswitch文を使う
1つの値に対して複数の処理を分けたい場合は、switch文が向いています。
C#int menu = 2;
switch (menu)
{
case 1:
Console.WriteLine("新規作成");
break;
case 2:
Console.WriteLine("保存");
break;
case 3:
Console.WriteLine("終了");
break;
default:
Console.WriteLine("無効な番号です");
break;
}
このような処理をif文で書くこともできます。
C#if (menu == 1)
{
Console.WriteLine("新規作成");
}
else if (menu == 2)
{
Console.WriteLine("保存");
}
else if (menu == 3)
{
Console.WriteLine("終了");
}
else
{
Console.WriteLine("無効な番号です");
}
どちらも正しく動きますが、分岐が増えるほどswitch文の方が見やすくなることがあります。
6-4. 単純な条件で値を返すだけなら三項演算子を使う
単純な条件で値を代入するだけなら、三項演算子を使うと簡潔に書けます。
C#int score = 80;
string result = score >= 60 ? "合格" : "不合格";
Console.WriteLine(result);
同じ処理をif文で書くと次のようになります。
C#int score = 80;
string result;
if (score >= 60)
{
result = "合格";
}
else
{
result = "不合格";
}
三項演算子を使うと短く書けますが、条件が複雑な場合は無理に使わない方がよいです。読みやすさを優先しましょう。
6-5. 初心者はまずif文から覚えるのがおすすめ
C#条件分岐を初めて学ぶなら、まずif文を覚えるのがおすすめです。
if文は、条件分岐の基本です。elseやelse ifを使えば、多くの処理に対応できます。また、switch文や三項演算子を理解するうえでも、if文の考え方が土台になります。
初心者の学習順序としては、次の流れがおすすめです。
if文で条件分岐の基本を理解するelseとelse ifで複数条件を扱うswitch文で値ごとの分岐を覚える三項演算子で簡単な条件分岐を短く書く
最初からすべてを完璧に使い分ける必要はありません。まずはif文で正しく書けることを目指しましょう。
6-6. 実務で読みやすい条件分岐を書くための判断基準
実務では、短く書くことよりも、他の人が読んで理解しやすいことが重要です。
判断基準は次のとおりです。
| 判断基準 | 選び方 |
|---|---|
| 条件が複雑 | if文 |
| 範囲判定がある | if文 |
| 同じ変数の値で分ける | switch文 |
| 分岐が多い | switch文を検討 |
| 値を選ぶだけ | 三項演算子 |
| 三項演算子で読みにくい | if文に戻す |
たとえば、次のようなコードは読みやすい条件分岐です。
C#bool isAdult = age >= 20;
if (isAdult)
{
Console.WriteLine("成人です");
}
条件式の意味が変数名で分かるため、読み手に親切です。C#条件分岐を書くときは、動くことだけでなく、読みやすさも意識しましょう。
7. C#条件分岐の実践例
ここからは、C#条件分岐を使った実践的なサンプルコードを紹介します。基本構文を覚えただけでは、実際にどのような場面で使うのかイメージしにくいかもしれません。
点数判定、成績ランク、メニュー処理、nullチェック、ログイン判定など、よく使う例を見ながら理解を深めましょう。
7-1. 入力された点数で合格・不合格を判定する
まずは、点数によって合格・不合格を判定する基本的な例です。
C#int score = 70;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
実行結果は次のようになります。
合格です
scoreが60以上なら合格、それ以外なら不合格です。これはC#条件分岐の基本的な使い方です。
7-2. 点数に応じて成績ランクを表示する
次は、点数に応じてA、B、C、Dのランクを表示する例です。
C#int score = 82;
if (score >= 90)
{
Console.WriteLine("ランクA");
}
else if (score >= 70)
{
Console.WriteLine("ランクB");
}
else if (score >= 60)
{
Console.WriteLine("ランクC");
}
else
{
Console.WriteLine("ランクD");
}
実行結果は次のようになります。
ランクB
このコードで重要なのは、条件の順番です。高い点数から順番に判定しているため、正しくランクを分けられます。
もし順番を間違えると、意図しない結果になることがあります。
C#int score = 95;
if (score >= 60)
{
Console.WriteLine("ランクC");
}
else if (score >= 90)
{
Console.WriteLine("ランクA");
}
この例では、scoreが95でも最初のscore >= 60がtrueになるため、ランクCと表示されてしまいます。else ifは上から順番に判定されるため、条件の順番に注意しましょう。
7-3. メニュー番号によって処理を切り替える
メニュー番号によって処理を切り替える場合は、switch文が便利です。
C#int menu = 1;
switch (menu)
{
case 1:
Console.WriteLine("データを登録します");
break;
case 2:
Console.WriteLine("データを更新します");
break;
case 3:
Console.WriteLine("データを削除します");
break;
case 4:
Console.WriteLine("終了します");
break;
default:
Console.WriteLine("無効なメニューです");
break;
}
実行結果は次のようになります。
データを登録します
このように、番号や文字列ごとに処理を分ける場合は、switch文を使うと分かりやすくなります。
7-4. nullチェックを含む条件分岐
C#では、変数にnullが入ることがあります。nullとは、値が存在しない状態を表します。
文字列がnullでないか確認してから処理する例を見てみましょう。
C#string? name = "田中";
if (name != null)
{
Console.WriteLine($"名前は{name}です");
}
else
{
Console.WriteLine("名前が入力されていません");
}
name != nullは、「nameがnullではない」という意味です。
空文字もチェックしたい場合は、string.IsNullOrEmptyを使うと便利です。
C#string name = "";
if (string.IsNullOrEmpty(name))
{
Console.WriteLine("名前が入力されていません");
}
else
{
Console.WriteLine($"名前は{name}です");
}
string.IsNullOrEmptyは、文字列がnullまたは空文字の場合にtrueを返します。入力チェックではよく使われます。
7-5. 複数条件を使ったログイン判定
ログイン処理では、ユーザー名とパスワードの両方が正しいかを判定することがあります。
C#string inputUserName = "admin";
string inputPassword = "1234";
string correctUserName = "admin";
string correctPassword = "1234";
if (inputUserName == correctUserName && inputPassword == correctPassword)
{
Console.WriteLine("ログイン成功");
}
else
{
Console.WriteLine("ユーザー名またはパスワードが違います");
}
この例では、&&を使って2つの条件を組み合わせています。ユーザー名とパスワードの両方が正しい場合だけ、ログイン成功になります。
さらに、アカウントが有効かどうかも判定する場合は、次のように書けます。
C#bool isActive = true;
if (inputUserName == correctUserName && inputPassword == correctPassword && isActive)
{
Console.WriteLine("ログイン成功");
}
else
{
Console.WriteLine("ログインできません");
}
条件が長くなる場合は、変数に分けると読みやすくなります。
C#bool isUserNameCorrect = inputUserName == correctUserName;
bool isPasswordCorrect = inputPassword == correctPassword;
bool canLogin = isUserNameCorrect && isPasswordCorrect && isActive;
if (canLogin)
{
Console.WriteLine("ログイン成功");
}
else
{
Console.WriteLine("ログインできません");
}
7-6. if文・switch文・三項演算子で同じ処理を書き比べる
最後に、同じ処理をif文、switch文、三項演算子で書き比べてみましょう。
点数が60点以上なら合格、それ以外なら不合格とする処理です。
まずはif文です。
C#int score = 75;
string result;
if (score >= 60)
{
result = "合格";
}
else
{
result = "不合格";
}
Console.WriteLine(result);
次に三項演算子です。
C#int score = 75;
string result = score >= 60 ? "合格" : "不合格";
Console.WriteLine(result);
この処理は条件が単純なので、三項演算子でも読みやすく書けます。
一方、switch文は範囲判定にはあまり向いていません。点数のように「60以上」といった条件を扱うなら、基本的にはif文の方が分かりやすいです。
ただし、値そのものが決まっている場合はswitch文が便利です。
C#string result = "合格";
switch (result)
{
case "合格":
Console.WriteLine("おめでとうございます");
break;
case "不合格":
Console.WriteLine("次回がんばりましょう");
break;
default:
Console.WriteLine("結果が不明です");
break;
}
このように、条件の内容によって使う構文を選ぶことが大切です。
8. C#条件分岐で初心者がつまずきやすいポイント
C#条件分岐は基本的な構文ですが、初心者がつまずきやすいポイントも多くあります。特に、波かっこの付け忘れ、条件式のミス、else ifの順番、switch文のbreak、三項演算子の使いすぎには注意が必要です。
ここでは、よくあるミスと対策を具体例で解説します。
8-1. 波かっこの付け忘れ
if文では、処理をまとめるために波かっこ{ }を使います。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
処理が1行だけの場合、波かっこを省略することもできます。
C#if (score >= 60)
Console.WriteLine("合格です");
ただし、初心者には波かっこを省略しない書き方をおすすめします。あとから処理を追加したときに、意図しない動作になることがあるからです。
C#if (score >= 60)
Console.WriteLine("合格です");
Console.WriteLine("おめでとうございます");
このコードでは、2行目のConsole.WriteLine("おめでとうございます");はif文の中ではありません。条件に関係なく実行されます。
正しくは次のように書きます。
C#if (score >= 60)
{
Console.WriteLine("合格です");
Console.WriteLine("おめでとうございます");
}
読みやすさと安全性を考えると、波かっこは常に書く習慣をつけるとよいでしょう。
8-2. 条件式の書き方ミス
条件式の書き方を間違えると、コンパイルエラーや意図しない動作の原因になります。
たとえば、比較演算子を逆に書いてしまうケースです。
C#int score = 70;
if (score <= 60)
{
Console.WriteLine("合格です");
}
このコードでは、scoreが60以下の場合に合格と表示されてしまいます。本来は60以上を合格にしたいので、次のように書くべきです。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
条件式を書くときは、「どの値ならtrueになるのか」を考えながら書きましょう。
8-3. else ifの順番を間違える
else ifは上から順番に判定されます。そのため、条件の順番がとても重要です。
悪い例を見てみましょう。
C#int score = 95;
if (score >= 60)
{
Console.WriteLine("C評価");
}
else if (score >= 80)
{
Console.WriteLine("B評価");
}
else if (score >= 90)
{
Console.WriteLine("A評価");
}
このコードでは、scoreが95でも最初のscore >= 60がtrueになるため、C評価と表示されます。
正しくは、高い点数から順番に判定します。
C#int score = 95;
if (score >= 90)
{
Console.WriteLine("A評価");
}
else if (score >= 80)
{
Console.WriteLine("B評価");
}
else if (score >= 60)
{
Console.WriteLine("C評価");
}
else
{
Console.WriteLine("D評価");
}
範囲判定をするときは、条件の順番を必ず確認しましょう。
8-4. switch文でbreakを書き忘れる
switch文では、各caseの最後にbreakを書くのが基本です。
C#int menu = 1;
switch (menu)
{
case 1:
Console.WriteLine("新規作成");
break;
case 2:
Console.WriteLine("保存");
break;
default:
Console.WriteLine("無効なメニュー");
break;
}
breakは、switch文から抜けるための命令です。C#では、処理があるcaseでbreakなどを書かないとコンパイルエラーになることがあります。
複数のcaseで同じ処理をしたい場合は、次のように書きます。
C#int day = 6;
switch (day)
{
case 6:
case 7:
Console.WriteLine("休日です");
break;
default:
Console.WriteLine("平日です");
break;
}
switch文では、caseとbreakをセットで意識しましょう。
8-5. 三項演算子を複雑にしすぎる
三項演算子は便利ですが、複雑な条件を書くと読みにくくなります。
C#int score = 85;
string rank = score >= 90 ? "A" : score >= 80 ? "B" : score >= 60 ? "C" : "D";
このコードは短いですが、初心者には読みづらいです。条件が複数ある場合は、if文を使った方が分かりやすくなります。
C#int score = 85;
string rank;
if (score >= 90)
{
rank = "A";
}
else if (score >= 80)
{
rank = "B";
}
else if (score >= 60)
{
rank = "C";
}
else
{
rank = "D";
}
三項演算子は、条件が1つだけの単純な場合に使うのがおすすめです。
8-6. ネストが深くなって読みにくくなる
条件分岐の中にさらに条件分岐を書くことをネストと呼びます。ネストが深くなると、コードが読みにくくなります。
C#if (isLogin)
{
if (isAdmin)
{
if (hasPermission)
{
Console.WriteLine("管理画面を表示します");
}
}
}
このようなコードは、条件が増えるほど理解しづらくなります。
論理演算子を使って条件をまとめると、ネストを浅くできます。
C#if (isLogin && isAdmin && hasPermission)
{
Console.WriteLine("管理画面を表示します");
}
また、条件を変数に分けるとさらに読みやすくなります。
C#bool canShowAdminPage = isLogin && isAdmin && hasPermission;
if (canShowAdminPage)
{
Console.WriteLine("管理画面を表示します");
}
C#条件分岐では、ネストを浅くして読みやすいコードを意識しましょう。
9. 読みやすい条件分岐を書くコツ
C#条件分岐は、正しく動くだけでなく、読みやすく書くことが大切です。特に実務では、自分だけでなく他の人もコードを読むため、分かりやすい条件分岐を書く力が重要になります。
ここでは、読みやすい条件分岐を書くための具体的なコツを紹介します。
9-1. 条件はできるだけシンプルにする
条件式が長すぎると、何を判定しているのか分かりにくくなります。
C#if (age >= 20 && hasLicense && !isSuspended && paymentStatus == "Paid")
{
Console.WriteLine("利用できます");
}
このような条件は、意味のある変数に分けると読みやすくなります。
C#bool isAdult = age >= 20;
bool canUseService = isAdult && hasLicense && !isSuspended && paymentStatus == "Paid";
if (canUseService)
{
Console.WriteLine("利用できます");
}
変数名を見るだけで条件の意味が分かるため、コードを読む人にとって理解しやすくなります。
9-2. ネストを浅くする
ネストが深いコードは、処理の流れを追いにくくなります。
C#if (user != null)
{
if (user.IsActive)
{
if (user.IsAdmin)
{
Console.WriteLine("管理者です");
}
}
}
条件をまとめると、次のようにすっきり書けます。
C#if (user != null && user.IsActive && user.IsAdmin)
{
Console.WriteLine("管理者です");
}
また、早めに処理を終了させる書き方もあります。
C#if (user == null)
{
Console.WriteLine("ユーザーが存在しません");
return;
}
if (!user.IsActive)
{
Console.WriteLine("ユーザーは無効です");
return;
}
if (user.IsAdmin)
{
Console.WriteLine("管理者です");
}
このように、ネストを浅くすると処理の流れが分かりやすくなります。
9-3. 条件式の意味が分かる変数名を使う
条件式を変数にする場合は、意味が分かる名前を付けることが大切です。
悪い例です。
C#bool flag = age >= 20 && hasLicense;
if (flag)
{
Console.WriteLine("利用できます");
}
flagだけでは、何を表しているのか分かりません。
良い例です。
C#bool canUseService = age >= 20 && hasLicense;
if (canUseService)
{
Console.WriteLine("利用できます");
}
canUseServiceという名前なら、「サービスを利用できるかどうか」を表していると分かります。
条件式の変数名には、is、has、canなどを使うと分かりやすくなります。
C#bool isAdult = age >= 20;
bool hasPermission = role == "Admin";
bool canLogin = isActive && hasPassword;
9-4. 同じ条件判定を何度も書かない
同じ条件式を何度も書くと、修正が必要になったときにミスが起きやすくなります。
C#if (age >= 20 && hasLicense)
{
Console.WriteLine("利用できます");
}
if (age >= 20 && hasLicense)
{
Console.WriteLine("割引対象です");
}
このような場合は、条件を変数にまとめましょう。
C#bool canUseService = age >= 20 && hasLicense;
if (canUseService)
{
Console.WriteLine("利用できます");
}
if (canUseService)
{
Console.WriteLine("割引対象です");
}
条件を1か所にまとめることで、修正もしやすくなります。
9-5. if・switch・三項演算子を無理に使い分けすぎない
if文、switch文、三項演算子にはそれぞれ向いている場面がありますが、無理に使い分ける必要はありません。
たとえば、三項演算子で書ける処理でも、if文の方が読みやすい場合があります。
C#string message;
if (score >= 60)
{
message = "合格です";
}
else
{
message = "不合格です";
}
このコードは少し長いですが、初心者にも分かりやすいです。
短く書くことを優先して、次のように複雑な三項演算子を書くと読みにくくなります。
C#string message = score >= 90 ? "優秀です" : score >= 60 ? "合格です" : "不合格です";
迷ったときは、まずif文で書くとよいでしょう。
9-6. コードの読みやすさを優先する
条件分岐を書くときは、「このコードをあとから読んだ人がすぐ理解できるか」を考えることが大切です。
読みやすいコードの例です。
C#bool isPassingScore = score >= 60;
if (isPassingScore)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
条件式の意味が明確なので、何を判定しているか分かりやすいです。
プログラムは一度書いたら終わりではありません。あとから修正したり、機能を追加したりすることがよくあります。そのため、C#条件分岐では、短さよりも読みやすさを優先しましょう。
10. C#条件分岐に関するよくある質問
ここでは、C#条件分岐について初心者が疑問に思いやすい内容をQ&A形式で解説します。if文、switch文、三項演算子の使い分けや、条件式の書き方について確認しておきましょう。
10-1. if文とswitch文はどちらを使えばいい?
複雑な条件や範囲判定をする場合はif文、1つの値に対して複数のパターンを分ける場合はswitch文を使うのがおすすめです。
たとえば、点数が60点以上かどうかを判定する場合はif文が向いています。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
一方、メニュー番号によって処理を分ける場合はswitch文が向いています。
C#switch (menu)
{
case 1:
Console.WriteLine("登録");
break;
case 2:
Console.WriteLine("更新");
break;
case 3:
Console.WriteLine("削除");
break;
}
迷った場合は、まずif文で書いて問題ありません。分岐が多くなり、同じ変数の値を何度も比較している場合は、switch文を検討しましょう。
10-2. 三項演算子は使わない方がいい?
三項演算子は使っても問題ありません。ただし、単純な条件に使うのがおすすめです。
C#string result = score >= 60 ? "合格" : "不合格";
このような短い条件なら、三項演算子を使うと分かりやすく書けます。
しかし、条件が複雑な場合や、三項演算子を何重にも重ねる場合は、if文を使った方が読みやすくなります。
C#if (score >= 90)
{
result = "A";
}
else if (score >= 70)
{
result = "B";
}
else
{
result = "C";
}
三項演算子は「短く書けるから使う」のではなく、「短く書いても読みやすい場合に使う」と考えましょう。
10-3. switch文で文字列は使える?
C#のswitch文では、文字列を使えます。
C#string command = "save";
switch (command)
{
case "new":
Console.WriteLine("新規作成します");
break;
case "save":
Console.WriteLine("保存します");
break;
case "exit":
Console.WriteLine("終了します");
break;
default:
Console.WriteLine("不明なコマンドです");
break;
}
この例では、commandが"save"なので、保存しますと表示されます。
文字列で処理を分けられるため、コマンド名、状態名、種類名などを判定するときに便利です。
10-4. 条件式に複数の条件を書ける?
はい、条件式には複数の条件を書けます。複数条件を組み合わせる場合は、&&や||を使います。
C#if (score >= 60 && attendanceRate >= 80)
{
Console.WriteLine("合格です");
}
&&は「かつ」という意味で、両方の条件がtrueの場合だけ全体がtrueになります。
C#if (isMember || hasCoupon)
{
Console.WriteLine("割引対象です");
}
||は「または」という意味で、どちらか一方でもtrueなら全体がtrueになります。
複数条件を書くときは、必要に応じて丸かっこを使うと読みやすくなります。
C#if ((isMember || hasCoupon) && totalPrice >= 10000)
{
Console.WriteLine("特別割引です");
}
10-5. elseは必ず書く必要がある?
elseは必ず書く必要はありません。条件に当てはまる場合だけ処理したいなら、ifだけで十分です。
C#if (score == 100)
{
Console.WriteLine("満点です");
}
一方、条件に当てはまらない場合の処理も必要なら、elseを書きます。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
つまり、elseは「条件に当てはまらない場合にも何か処理したいとき」に使います。
10-6. 条件分岐を短く書く方法はある?
条件分岐を短く書く方法として、三項演算子があります。
C#string result = score >= 60 ? "合格" : "不合格";
また、条件式を変数にまとめることで、結果的に読みやすく短くできる場合もあります。
C#bool canLogin = isActive && hasPassword;
if (canLogin)
{
Console.WriteLine("ログインできます");
}
ただし、短く書くことだけを目的にすると、かえって読みにくくなることがあります。C#条件分岐では、短さよりも分かりやすさを優先しましょう。
まとめ
C#条件分岐は、条件によって処理を変えるための重要な基本構文です。プログラムに「もし〇〇なら△△する」という判断を加えることで、実用的な処理を作れるようになります。
C#でよく使う条件分岐には、if文、switch文、三項演算子があります。
if文は、条件分岐の基本です。範囲判定や複数条件など、幅広い場面で使えます。初心者はまずif文から覚えるのがおすすめです。
switch文は、1つの値に対して複数のパターンを分けたいときに便利です。メニュー番号、曜日、状態など、決まった値ごとに処理を切り替える場合に向いています。
三項演算子は、単純な条件によって代入する値を変えるときに使えます。短く書けるメリットがありますが、複雑な条件に使うと読みにくくなるため注意が必要です。
C#条件分岐を上達させるには、次のポイントを意識しましょう。
条件式はtrueまたはfalseで判定されることを理解すること。
比較演算子と論理演算子を正しく使うこと。
if、switch、三項演算子の向いている場面を知ること。
条件が複雑になったら、変数に分けて読みやすくすること。
ネストを深くしすぎず、シンプルなコードを心がけること。
条件分岐はC#プログラミングの基礎であり、実務でも頻繁に使われます。まずはif文をしっかり理解し、慣れてきたらswitch文や三項演算子も使い分けられるように練習していきましょう。

