C#のif文を完全攻略|条件分岐の基本からelse if・比較演算子・よくあるエラーまでわかりやすく解説
はじめに
C#でプログラムを書くうえで、必ず理解しておきたい基本構文のひとつがif文です。if文は、条件によって実行する処理を切り替えるために使います。
たとえば、「年齢が20歳以上なら成人と表示する」「ログインしている場合だけマイページを表示する」「点数が80点以上なら合格と判定する」といった処理は、すべてif文で表現できます。
この記事では、C#のif文について、基本構文からelse、else if、比較演算子、論理演算子、ネスト、よくあるエラー、読みやすく書くコツまで、初心者にもわかりやすく解説します。
1. C#のif文とは?条件分岐の基本を理解しよう
1-1. if文は「条件によって処理を分ける」ための構文
C#のif文は、指定した条件が成り立つかどうかによって、実行する処理を分けるための構文です。
プログラムでは、常に同じ処理だけを実行するとは限りません。状況に応じて処理を変えたい場面が多くあります。
たとえば、次のような判断です。
「ユーザーがログインしているなら、マイページを表示する」
「在庫があるなら、購入ボタンを表示する」
「点数が60点以上なら、合格と表示する」
このように、条件を判定して処理を切り替えることを「条件分岐」といいます。C#で条件分岐を書くときによく使うのがif文です。
1-2. C#でif文を使う場面の具体例
C#のif文は、コンソールアプリ、Webアプリ、ゲーム開発、業務システムなど、さまざまな場面で使われます。
たとえば、次のような処理で使います。
C#int age = 20;
if (age >= 18)
{
Console.WriteLine("成人です");
}
このコードでは、ageが18以上かどうかを判定しています。条件が成り立つ場合だけ、Console.WriteLine("成人です");が実行されます。
ゲームであれば、「HPが0以下ならゲームオーバーにする」、Webアプリであれば「入力されたパスワードが正しければログインさせる」といった使い方もできます。
1-3. if文の基本構文
C#のif文の基本構文は次のとおりです。
C#if (条件式)
{
条件式がtrueのときに実行する処理
}
ifの後ろに丸かっこ()を書き、その中に条件式を書きます。条件式とは、結果がtrueまたはfalseになる式のことです。
そして、条件式がtrueだった場合に実行したい処理を波かっこ{}の中に書きます。
たとえば、次のコードを見てみましょう。
C#int score = 80;
if (score >= 60)
{
Console.WriteLine("合格です");
}
score >= 60は「scoreが60以上かどうか」を判定する条件式です。scoreは80なので、この条件式はtrueになります。そのため、画面には「合格です」と表示されます。
1-4. 条件式がtrueのときだけ処理が実行される仕組み
if文では、条件式の結果がtrueのときだけ、波かっこの中の処理が実行されます。条件式がfalseの場合、波かっこの中の処理はスキップされます。
C#int score = 40;
if (score >= 60)
{
Console.WriteLine("合格です");
}
Console.WriteLine("判定終了");
この場合、scoreは40なので、score >= 60はfalseです。そのため、「合格です」は表示されません。
ただし、if文の外にあるConsole.WriteLine("判定終了");は通常どおり実行されます。
実行結果は次のようになります。
C#判定終了
このように、C#のif文では、条件式の結果によって一部の処理を実行するかどうかを制御できます。
2. C#のif文の基本的な書き方
2-1. if文だけを使うシンプルな条件分岐
もっともシンプルなif文は、「条件に当てはまる場合だけ処理を行う」という書き方です。
C#int temperature = 30;
if (temperature >= 28)
{
Console.WriteLine("暑いです");
}
このコードでは、temperatureが28以上なら「暑いです」と表示されます。条件に当てはまらない場合は、何も表示されません。
if文だけを使う書き方は、「条件を満たしたときだけ特別な処理をしたい」場合に向いています。
2-2. 波かっこ{}を使った書き方
C#のif文では、条件がtrueのときに実行する処理を波かっこ{}で囲みます。
C#int stock = 5;
if (stock > 0)
{
Console.WriteLine("在庫があります");
Console.WriteLine("購入できます");
}
波かっこの中には、複数の処理を書くことができます。この例では、stock > 0がtrueの場合に、2つのメッセージが表示されます。
波かっこを使うことで、「どこからどこまでがif文の処理なのか」が明確になります。
2-3. 処理が1行だけの場合に波かっこを省略できるケース
C#では、if文の中で実行する処理が1行だけの場合、波かっこを省略することもできます。
C#int age = 20;
if (age >= 18)
Console.WriteLine("成人です");
このコードは、次のコードと同じ意味です。
C#int age = 20;
if (age >= 18)
{
Console.WriteLine("成人です");
}
ただし、波かっこを省略した場合、if文の対象になるのは直後の1行だけです。
2-4. 初心者は波かっこを省略しないほうがよい理由
初心者のうちは、処理が1行だけでも波かっこを省略しないことをおすすめします。
理由は、後から処理を追加したときにミスが起こりやすいからです。
C#int age = 16;
if (age >= 18)
Console.WriteLine("成人です");
Console.WriteLine("選挙権があります");
一見すると、2つのConsole.WriteLineがどちらもif文の中にあるように見えるかもしれません。しかし、波かっこがない場合、if文の対象になるのは直後の1行だけです。
つまり、実際には次のような意味になります。
C#int age = 16;
if (age >= 18)
{
Console.WriteLine("成人です");
}
Console.WriteLine("選挙権があります");
この場合、ageが16でも「選挙権があります」と表示されてしまいます。
こうしたミスを防ぐためにも、C#のif文では基本的に波かっこを付けて書く習慣をつけましょう。
3. if else文で条件に当てはまらない場合の処理を書く
3-1. else文の基本構文
if文では、条件がtrueのときの処理を書けます。一方で、条件がfalseのときの処理を書きたい場合は、else文を使います。
基本構文は次のとおりです。
C#if (条件式)
{
条件式がtrueのときの処理
}
else
{
条件式がfalseのときの処理
}
elseは「それ以外の場合」という意味です。ifの条件に当てはまらなかった場合に、elseの中の処理が実行されます。
3-2. ifとelseを使ったサンプルコード
次の例では、点数が60点以上なら合格、それ以外なら不合格と表示します。
C#int score = 55;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
この場合、scoreは55なので、score >= 60はfalseです。そのため、elseの中の処理が実行され、「不合格です」と表示されます。
3-3. trueの場合とfalseの場合で処理を分ける考え方
if else文は、条件の結果がtrueかfalseかで処理を分けたい場合に使います。
たとえば、ログイン状態を判定するコードは次のように書けます。
C#bool isLoggedIn = true;
if (isLoggedIn)
{
Console.WriteLine("マイページを表示します");
}
else
{
Console.WriteLine("ログインページを表示します");
}
isLoggedInがtrueならマイページを表示し、falseならログインページを表示します。
このように、2つの選択肢のどちらかを必ず実行したい場合は、if else文が便利です。
3-4. else文でよくある書き間違い
else文でよくある間違いのひとつは、elseに条件式を書いてしまうことです。
C#// 間違い
if (score >= 60)
{
Console.WriteLine("合格です");
}
else (score < 60)
{
Console.WriteLine("不合格です");
}
elseには条件式を書きません。条件を書きたい場合は、後で解説するelse ifを使います。
正しくは次のように書きます。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
elseは、ifの条件に当てはまらなかったすべての場合を受け取る構文です。
4. else if文で複数条件を分岐する
4-1. else if文の基本構文
条件が2つではなく、3つ以上ある場合はelse if文を使います。
基本構文は次のとおりです。
C#if (条件式1)
{
条件式1がtrueのときの処理
}
else if (条件式2)
{
条件式1がfalseで、条件式2がtrueのときの処理
}
else
{
どの条件にも当てはまらないときの処理
}
else ifを使うことで、複数の条件を順番に判定できます。
4-2. 複数の条件を上から順番に判定する仕組み
else if文は、上から順番に条件を判定します。そして、最初にtrueになったブロックだけが実行されます。
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やelseは判定されません。
4-3. 点数判定を例にしたelse if文の使い方
点数によって成績を判定する場合、else if文はとても使いやすいです。
C#int score = 72;
if (score >= 90)
{
Console.WriteLine("優秀です");
}
else if (score >= 80)
{
Console.WriteLine("良い成績です");
}
else if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
このように、点数の範囲ごとに処理を分けることができます。
重要なのは、条件を書く順番です。高い点数から順番に判定することで、意図した結果になりやすくなります。
たとえば、先にscore >= 60を書いてしまうと、90点以上でも最初にtrueになってしまい、「合格です」と表示されてしまいます。
C#// 条件の順番がよくない例
if (score >= 60)
{
Console.WriteLine("合格です");
}
else if (score >= 90)
{
Console.WriteLine("優秀です");
}
この場合、scoreが95でもscore >= 60が先にtrueになるため、else if (score >= 90)は実行されません。
4-4. else ifとelseの使い分け
else ifとelseの違いは、条件を書くかどうかです。
else ifは、追加の条件を判定したいときに使います。
C#else if (score >= 80)
{
Console.WriteLine("良い成績です");
}
一方、elseは、どの条件にも当てはまらなかった場合の処理を書きます。
C#else
{
Console.WriteLine("不合格です");
}
つまり、条件を指定したいならelse if、最後に残りすべてのケースを処理したいならelseを使います。
4-5. else ifを使いすぎると読みにくくなる理由
else ifは便利ですが、数が多くなりすぎるとコードが読みにくくなります。
C#if (type == 1)
{
Console.WriteLine("タイプ1");
}
else if (type == 2)
{
Console.WriteLine("タイプ2");
}
else if (type == 3)
{
Console.WriteLine("タイプ3");
}
else if (type == 4)
{
Console.WriteLine("タイプ4");
}
else if (type == 5)
{
Console.WriteLine("タイプ5");
}
このように条件が増えすぎると、どこで何を判定しているのか分かりにくくなります。
単純に値ごとに処理を分ける場合は、switch文のほうが読みやすいこともあります。複雑な条件にはif文、決まった値ごとの分岐にはswitch文、と使い分けるとよいでしょう。
5. if文でよく使う比較演算子
5-1. 等しいかを判定する「==」
C#のif文では、条件式を書くときに比較演算子をよく使います。
値が等しいかどうかを判定するには、==を使います。
C#int number = 10;
if (number == 10)
{
Console.WriteLine("numberは10です");
}
number == 10は、「numberが10と等しいか」を判定しています。
5-2. 等しくないかを判定する「!=」
値が等しくないかどうかを判定するには、!=を使います。
C#string role = "guest";
if (role != "admin")
{
Console.WriteLine("管理者ではありません");
}
この例では、roleが"admin"ではない場合に処理が実行されます。
5-3. 大小を比較する「>」「<」「>=」「<=」
数値の大小を比較する場合は、次の演算子を使います。
C#int age = 20;
if (age > 18)
{
Console.WriteLine("18歳より上です");
}
if (age < 30)
{
Console.WriteLine("30歳未満です");
}
if (age >= 20)
{
Console.WriteLine("20歳以上です");
}
if (age <= 20)
{
Console.WriteLine("20歳以下です");
}
それぞれの意味は次のとおりです。
>は「より大きい」、<は「より小さい」、>=は「以上」、<=は「以下」を表します。
>=や<=は、指定した値を含む点に注意しましょう。たとえば、age >= 20は20歳も含みます。
5-4. 「=」と「==」の違いに注意
C#初心者が特に間違えやすいのが、=と==の違いです。
=は代入です。右側の値を左側の変数に入れるときに使います。
C#int number = 10;
一方、==は比較です。左側と右側が等しいかどうかを判定するときに使います。
C#if (number == 10)
{
Console.WriteLine("10です");
}
if文の条件式で「等しいか」を判定したい場合は、必ず==を使います。
5-5. 文字列を比較するときの基本
C#では、文字列が等しいかどうかを==で比較できます。
C#string name = "Taro";
if (name == "Taro")
{
Console.WriteLine("名前はTaroです");
}
ただし、文字列比較では大文字と小文字の違いに注意が必要です。
C#string name = "taro";
if (name == "Taro")
{
Console.WriteLine("一致しました");
}
else
{
Console.WriteLine("一致しませんでした");
}
この場合、"taro"と"Taro"は異なる文字列として扱われるため、「一致しませんでした」と表示されます。
大文字と小文字を区別せずに比較したい場合は、Equalsメソッドを使う方法があります。
C#string name = "taro";
if (name.Equals("Taro", StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("一致しました");
}
文字列を比較するときは、大文字小文字を区別したいのか、区別したくないのかを意識しましょう。
6. 複数条件を組み合わせる論理演算子
6-1. AND条件を表す「&&」
複数の条件がすべて成り立つ場合だけ処理を実行したいときは、&&を使います。
&&はAND条件を表します。
C#int age = 25;
bool hasTicket = true;
if (age >= 18 && hasTicket)
{
Console.WriteLine("入場できます");
}
この例では、age >= 18とhasTicketの両方がtrueの場合だけ、「入場できます」と表示されます。
どちらか一方でもfalseなら、if文の中の処理は実行されません。
6-2. OR条件を表す「||」
複数の条件のうち、どれか1つでも成り立てば処理を実行したい場合は、||を使います。
||はOR条件を表します。
C#bool isMember = true;
bool hasCoupon = false;
if (isMember || hasCoupon)
{
Console.WriteLine("割引が適用されます");
}
この例では、会員であるか、クーポンを持っているか、どちらか一方でもtrueなら割引が適用されます。
6-3. NOT条件を表す「!」
条件を反転させたい場合は、!を使います。
!はNOT条件を表し、trueをfalseに、falseをtrueに反転します。
C#bool isLoggedIn = false;
if (!isLoggedIn)
{
Console.WriteLine("ログインしてください");
}
isLoggedInはfalseですが、!isLoggedInによって反転されるため、条件式はtrueになります。そのため、「ログインしてください」と表示されます。
6-4. 複数条件を組み合わせたサンプルコード
論理演算子を使うと、より実践的な条件分岐を書けます。
C#int age = 20;
bool hasLicense = true;
bool isSuspended = false;
if (age >= 18 && hasLicense && !isSuspended)
{
Console.WriteLine("運転できます");
}
else
{
Console.WriteLine("運転できません");
}
このコードでは、次の3つの条件を判定しています。
年齢が18歳以上であること、免許を持っていること、免許停止中ではないことです。
すべての条件を満たした場合だけ、「運転できます」と表示されます。
6-5. 条件式が複雑なときはかっこで優先順位を明確にする
&&と||を組み合わせると、条件式が複雑になることがあります。
C#bool isMember = true;
bool hasCoupon = false;
int totalPrice = 5000;
if (isMember || hasCoupon && totalPrice >= 3000)
{
Console.WriteLine("割引対象です");
}
このようなコードは、演算子の優先順位を知らないと意図が分かりにくくなります。
読みやすくするためには、かっこを使って条件のまとまりを明確にしましょう。
C#if ((isMember || hasCoupon) && totalPrice >= 3000)
{
Console.WriteLine("割引対象です");
}
このように書くと、「会員またはクーポンあり」で、かつ「購入金額が3000円以上」の場合に割引対象になることが明確になります。
7. if文の中にif文を書くネスト構造
7-1. ネストしたif文の基本
C#では、if文の中にさらにif文を書くことができます。これをネストといいます。
C#if (条件式1)
{
if (条件式2)
{
処理
}
}
ネストを使うと、「ある条件を満たしたうえで、さらに別の条件を判定する」という処理を書けます。
7-2. ネストを使ったサンプルコード
次の例では、ログインしているかを確認し、ログインしている場合だけ管理者かどうかを判定しています。
C#bool isLoggedIn = true;
bool isAdmin = true;
if (isLoggedIn)
{
if (isAdmin)
{
Console.WriteLine("管理画面を表示します");
}
else
{
Console.WriteLine("通常画面を表示します");
}
}
else
{
Console.WriteLine("ログインしてください");
}
このように、条件を段階的に判定したいときにネストしたif文を使えます。
7-3. ネストが深くなると読みにくくなる理由
ネストは便利ですが、深くなりすぎるとコードが読みにくくなります。
C#if (isLoggedIn)
{
if (isAdmin)
{
if (hasPermission)
{
Console.WriteLine("操作できます");
}
}
}
このようにif文が何重にも重なると、どの条件の中にいるのか分かりにくくなります。
また、波かっこの対応も追いづらくなり、修正時のミスが増えやすくなります。
7-4. 早期returnでネストを浅くする考え方
メソッドの中でif文を書く場合は、早期returnを使うことでネストを浅くできます。
たとえば、次のようなコードがあるとします。
C#void ShowAdminPage(bool isLoggedIn, bool isAdmin)
{
if (isLoggedIn)
{
if (isAdmin)
{
Console.WriteLine("管理画面を表示します");
}
else
{
Console.WriteLine("権限がありません");
}
}
else
{
Console.WriteLine("ログインしてください");
}
}
これを早期returnで書くと、次のようになります。
C#void ShowAdminPage(bool isLoggedIn, bool isAdmin)
{
if (!isLoggedIn)
{
Console.WriteLine("ログインしてください");
return;
}
if (!isAdmin)
{
Console.WriteLine("権限がありません");
return;
}
Console.WriteLine("管理画面を表示します");
}
条件を満たさない場合に先に処理を終えることで、ネストが浅くなり、読みやすいコードになります。
8. C#のif文でよくあるエラーと原因
8-1. 条件式にbool型以外を書いてしまう
C#のif文の条件式には、結果がbool型になる式を書く必要があります。
たとえば、次のコードはエラーになります。
C#int number = 1;
if (number)
{
Console.WriteLine("実行されます");
}
C#では、int型の値をそのままif文の条件式として使うことはできません。
正しくは、比較演算子を使ってbool型の結果になるように書きます。
C#int number = 1;
if (number > 0)
{
Console.WriteLine("numberは0より大きいです");
}
number > 0はtrueまたはfalseを返すため、if文の条件式として使えます。
8-2. セミコロンをif文の直後に書いてしまう
if文の直後にセミコロン;を書いてしまうミスもよくあります。
C#int score = 40;
if (score >= 60);
{
Console.WriteLine("合格です");
}
このコードでは、if (score >= 60);の時点でif文が終わってしまいます。そのため、波かっこの中の処理は条件に関係なく実行されます。
正しくは、if文の直後にセミコロンを書かないようにします。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
if文の後ろにはセミコロンを付けず、条件がtrueのときに実行したい処理を波かっこの中に書きましょう。
8-3. 「=」と「==」を間違える
if文で等しいかどうかを判定したいときに、==ではなく=を書いてしまうミスがあります。
C#int number = 10;
// 間違い
if (number = 10)
{
Console.WriteLine("10です");
}
C#では、number = 10は代入です。しかも結果はint型になるため、if文の条件式として使えずエラーになります。
正しくは、比較演算子の==を使います。
C#if (number == 10)
{
Console.WriteLine("10です");
}
「代入は=、比較は==」と覚えておきましょう。
8-4. 波かっこの対応がずれる
if文が増えると、波かっこの対応がずれてエラーになることがあります。
C#if (score >= 60)
{
Console.WriteLine("合格です");
else
{
Console.WriteLine("不合格です");
}
このコードでは、ifブロックを閉じる波かっこ}が足りません。
正しくは次のように書きます。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
波かっこの数が合っているか、インデントが正しいかを確認することが大切です。
8-5. else ifを「elseif」と書いてしまう
C#では、else ifは2つの単語として書きます。
C#// 間違い
elseif (score >= 80)
{
Console.WriteLine("良い成績です");
}
C#にはelseifというキーワードはありません。
正しくは、elseとifの間にスペースを入れて書きます。
C#else if (score >= 80)
{
Console.WriteLine("良い成績です");
}
ほかの言語ではelseifやelifを使うことがありますが、C#ではelse ifと書く点に注意しましょう。
8-6. 文字列比較で意図しない結果になる
文字列比較では、大文字小文字、前後の空白、全角半角などによって意図しない結果になることがあります。
C#string input = "admin ";
if (input == "admin")
{
Console.WriteLine("管理者です");
}
else
{
Console.WriteLine("管理者ではありません");
}
この例では、inputの末尾に空白があるため、"admin"とは一致しません。
前後の空白を取り除きたい場合は、Trimを使います。
C#string input = "admin ";
if (input.Trim() == "admin")
{
Console.WriteLine("管理者です");
}
大文字小文字を区別しない場合は、次のように書けます。
C#string input = "Admin";
if (input.Equals("admin", StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("管理者です");
}
文字列をif文で判定するときは、入力値の状態を意識することが大切です。
9. if文を読みやすく書くためのポイント
9-1. 条件式はできるだけシンプルにする
if文の条件式が長すぎると、コードの意味が分かりにくくなります。
C#if (age >= 18 && hasLicense && !isSuspended && country == "JP")
{
Console.WriteLine("運転できます");
}
この程度であれば読めますが、条件がさらに増えると理解しづらくなります。
条件式はできるだけシンプルにし、ひと目で意味が分かるように書きましょう。
9-2. 複雑な条件は変数に分ける
条件式が複雑な場合は、条件の意味を表す変数に分けると読みやすくなります。
C#bool isAdult = age >= 18;
bool canDrive = hasLicense && !isSuspended;
if (isAdult && canDrive)
{
Console.WriteLine("運転できます");
}
isAdultやcanDriveのような変数名を付けることで、条件の意味が分かりやすくなります。
複雑な条件式をそのままif文に詰め込むよりも、読みやすく保守しやすいコードになります。
9-3. 否定条件ばかりにしない
!を使った否定条件が多いと、条件を理解するのに時間がかかります。
C#if (!isNotAvailable)
{
Console.WriteLine("利用できます");
}
このような二重否定に近い条件は読みにくくなります。
できるだけ肯定的な名前や条件にすると、意味が分かりやすくなります。
C#if (isAvailable)
{
Console.WriteLine("利用できます");
}
否定条件を使うこと自体は問題ありませんが、使いすぎると読みにくくなるため注意しましょう。
9-4. ネストを深くしすぎない
if文のネストが深くなると、コードの見通しが悪くなります。
C#if (isLoggedIn)
{
if (isAdmin)
{
if (hasPermission)
{
Console.WriteLine("操作できます");
}
}
}
このような場合は、条件をまとめたり、早期returnを使ったりして、ネストを浅くできないか考えましょう。
C#if (!isLoggedIn)
{
return;
}
if (!isAdmin)
{
return;
}
if (!hasPermission)
{
return;
}
Console.WriteLine("操作できます");
ネストを浅くすると、処理の流れが上から下へ読みやすくなります。
9-5. switch文や三項演算子との使い分けを考える
すべての条件分岐をif文で書く必要はありません。
値によって処理を分けるだけならswitch文が向いている場合があります。
C#switch (status)
{
case "open":
Console.WriteLine("受付中です");
break;
case "closed":
Console.WriteLine("終了しました");
break;
default:
Console.WriteLine("不明な状態です");
break;
}
また、単純に値を代入するだけなら三項演算子が使える場合もあります。
C#string message = score >= 60 ? "合格です" : "不合格です";
ただし、初心者のうちは無理に短く書くよりも、まずはif文で分かりやすく書くことを優先しましょう。
10. if文・switch文・三項演算子の違い
10-1. if文が向いているケース
if文は、条件が複雑な場合に向いています。
たとえば、複数の条件を組み合わせる場合です。
C#if (age >= 18 && hasTicket && !isBanned)
{
Console.WriteLine("入場できます");
}
数値の範囲を判定したい場合や、複数の条件を組み合わせたい場合は、if文が分かりやすいです。
C#if (score >= 90)
{
Console.WriteLine("A評価");
}
else if (score >= 80)
{
Console.WriteLine("B評価");
}
else
{
Console.WriteLine("C評価");
}
このように、条件に幅がある場合はif文が向いています。
10-2. switch文が向いているケース
switch文は、1つの値に対して複数の候補を比較する場合に向いています。
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;
}
このように、特定の値ごとに処理を分ける場合は、else ifを何度も書くよりswitch文のほうが読みやすいことがあります。
10-3. 三項演算子が向いているケース
三項演算子は、条件によって値を切り替えるだけのシンプルな処理に向いています。
C#int score = 75;
string result = score >= 60 ? "合格" : "不合格";
Console.WriteLine(result);
これは次のif else文と同じ意味です。
C#string result;
if (score >= 60)
{
result = "合格";
}
else
{
result = "不合格";
}
三項演算子はコードを短く書けますが、条件や処理が複雑になると読みにくくなります。複雑な分岐はif文で書いたほうが安全です。
10-4. 初心者はまずif文を確実に理解すべき理由
C#の条件分岐には、if文、switch文、三項演算子などがあります。しかし、初心者が最初にしっかり理解すべきなのはif文です。
理由は、if文がもっとも基本的で、ほかの条件分岐を理解する土台になるからです。
if文を理解していれば、条件式、比較演算子、論理演算子、trueとfalseの考え方が身につきます。これらはC#のプログラミング全体で必要になる知識です。
まずはif文を正しく書けるようになり、そのうえでswitch文や三項演算子を使い分けていきましょう。
11. C#のif文を使った実践サンプル
11-1. 年齢によって表示メッセージを変える
年齢によってメッセージを変えるサンプルです。
C#int age = 18;
if (age >= 20)
{
Console.WriteLine("成人です");
}
else
{
Console.WriteLine("未成年です");
}
このコードでは、ageが20以上なら「成人です」、それ以外なら「未成年です」と表示されます。
年齢判定のように、数値の大小で処理を分ける場面ではif else文がよく使われます。
11-2. 点数によって成績を判定する
点数によって成績を判定するサンプルです。
C#int score = 88;
if (score >= 90)
{
Console.WriteLine("A評価");
}
else if (score >= 80)
{
Console.WriteLine("B評価");
}
else if (score >= 70)
{
Console.WriteLine("C評価");
}
else if (score >= 60)
{
Console.WriteLine("D評価");
}
else
{
Console.WriteLine("不合格");
}
この例では、点数の高い条件から順番に判定しています。else if文では、条件の順番が結果に影響するため注意が必要です。
11-3. ログイン状態によって処理を分ける
ログインしているかどうかで処理を分けるサンプルです。
C#bool isLoggedIn = false;
if (isLoggedIn)
{
Console.WriteLine("マイページを表示します");
}
else
{
Console.WriteLine("ログインしてください");
}
bool型の変数は、それ自体がtrueまたはfalseを表すため、if (isLoggedIn)のようにそのまま条件式として使えます。
11-4. 入力値が空かどうかを判定する
ユーザーの入力値が空かどうかを判定する場合は、string.IsNullOrEmptyを使うと便利です。
C#string input = "";
if (string.IsNullOrEmpty(input))
{
Console.WriteLine("入力してください");
}
else
{
Console.WriteLine("入力された値: " + input);
}
string.IsNullOrEmpty(input)は、文字列がnullまたは空文字""の場合にtrueを返します。
空白だけの入力も空として扱いたい場合は、string.IsNullOrWhiteSpaceを使います。
C#string input = " ";
if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("入力してください");
}
入力チェックでは、空文字だけでなく空白も考慮すると実用的です。
11-5. 複数条件で購入可否を判定する
複数の条件を組み合わせて、購入できるかどうかを判定するサンプルです。
C#int stock = 3;
int userAge = 25;
bool isMember = true;
if (stock > 0 && userAge >= 18 && isMember)
{
Console.WriteLine("購入できます");
}
else
{
Console.WriteLine("購入できません");
}
このコードでは、在庫があること、ユーザーが18歳以上であること、会員であることの3つを判定しています。
すべての条件を満たした場合だけ「購入できます」と表示されます。
条件が多い場合は、次のように変数に分けると読みやすくなります。
C#bool hasStock = stock > 0;
bool isAdult = userAge >= 18;
bool canBuy = hasStock && isAdult && isMember;
if (canBuy)
{
Console.WriteLine("購入できます");
}
else
{
Console.WriteLine("購入できません");
}
条件に名前を付けることで、コードの意味が分かりやすくなります。
12. C#のif文に関するよくある質問
12-1. if文の条件式には何を書けばよい?
C#のif文の条件式には、結果がbool型になる式を書きます。
たとえば、次のような式です。
C#score >= 60
name == "Taro"
isLoggedIn
stock > 0 && isMember
比較演算子や論理演算子を使って、trueまたはfalseになる条件式を書きます。
int型やstring型の値をそのまま条件式に書くことはできません。
C#// C#ではエラー
if (score)
{
}
数値を判定したい場合は、次のように比較します。
C#if (score > 0)
{
}
12-2. elseは必ず書く必要がある?
elseは必ず書く必要はありません。
条件を満たした場合だけ処理したいなら、if文だけで十分です。
C#if (isLoggedIn)
{
Console.WriteLine("ログイン済みです");
}
一方で、条件を満たさなかった場合にも何か処理したいなら、elseを書きます。
C#if (isLoggedIn)
{
Console.WriteLine("ログイン済みです");
}
else
{
Console.WriteLine("ログインしてください");
}
必要に応じて使い分けましょう。
12-3. else ifはいくつまで書ける?
C#では、else ifを複数書くことができます。
C#if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 80)
{
Console.WriteLine("B");
}
else if (score >= 70)
{
Console.WriteLine("C");
}
else
{
Console.WriteLine("D");
}
ただし、数が多くなりすぎると読みにくくなります。
else ifが多くなった場合は、switch文を使えないか、条件をメソッドに分けられないかを考えるとよいでしょう。
12-4. if文の中にif文を書いてもよい?
C#では、if文の中にif文を書くことができます。
C#if (isLoggedIn)
{
if (isAdmin)
{
Console.WriteLine("管理者です");
}
}
このような書き方をネストといいます。
ただし、ネストが深くなるとコードが読みにくくなるため注意が必要です。条件を整理したり、早期returnを使ったりして、できるだけ浅く書くことを意識しましょう。
12-5. switch文とif文はどちらを使うべき?
複雑な条件や範囲の判定にはif文が向いています。
C#if (score >= 80 && attendanceRate >= 90)
{
Console.WriteLine("優秀です");
}
一方で、1つの値に対して複数の候補を比較する場合は、switch文が向いていることがあります。
C#switch (status)
{
case "active":
Console.WriteLine("有効です");
break;
case "inactive":
Console.WriteLine("無効です");
break;
default:
Console.WriteLine("不明です");
break;
}
初心者のうちは、まずif文で条件分岐の考え方を理解しましょう。その後、コードが読みやすくなる場面でswitch文を使うとよいです。
まとめ
C#のif文は、条件によって処理を分けるための基本構文です。プログラムでは、「条件を満たした場合だけ処理する」「条件に当てはまらない場合は別の処理をする」「複数の条件を順番に判定する」といった場面がよくあります。
if文だけを使えば、条件がtrueのときだけ処理を実行できます。elseを使えば、条件がfalseのときの処理も書けます。さらに、else ifを使えば、複数の条件を分岐できます。
また、==、!=、>、<、>=、<=といった比較演算子や、&&、||、!といった論理演算子を使うことで、より実践的な条件式を書けます。
C#のif文でよくあるミスには、条件式にbool型以外を書いてしまう、if文の直後にセミコロンを書いてしまう、=と==を間違える、波かっこの対応がずれる、else ifをelseifと書いてしまうなどがあります。
読みやすいif文を書くためには、条件式をシンプルにする、複雑な条件を変数に分ける、否定条件を使いすぎない、ネストを深くしすぎないといった工夫が大切です。
C#の条件分岐を理解するうえで、if文はもっとも重要な基礎です。まずは基本構文を確実に覚え、elseやelse if、比較演算子、論理演算子を組み合わせながら、少しずつ実践的なコードを書けるようになりましょう。

