C#のelseifは存在しない?else ifの正しい書き方・条件分岐の使い方を初心者向けに解説
はじめに
C#で条件分岐を学んでいると、「複数の条件を判定したいときは elseif と書くのかな?」と疑問に思うことがあります。
結論から言うと、C#に elseif という書き方は存在しません。C#では、else if のように else と if の間に半角スペースを入れて書くのが正しい構文です。
C#if (条件1)
{
// 条件1がtrueのとき
}
else if (条件2)
{
// 条件1がfalseで、条件2がtrueのとき
}
else
{
// どの条件にも当てはまらないとき
}
この記事では、C#の else if の正しい書き方、elseif と書くとエラーになる理由、よくあるミス、読みやすく書くコツまで初心者向けに解説します。
1. C#にelseifは存在しない?まず結論を確認
1-1. C#では「elseif」ではなく「else if」と書く
C#で複数条件を分岐させる場合は、次のように書きます。
C#int score = 75;
if (score >= 90)
{
Console.WriteLine("評価はAです");
}
else if (score >= 70)
{
Console.WriteLine("評価はBです");
}
else if (score >= 50)
{
Console.WriteLine("評価はCです");
}
else
{
Console.WriteLine("不合格です");
}
正しいのは else if です。
C#else if (score >= 70)
間違いは elseif です。
C#elseif (score >= 70) // C#ではエラー
else if は1つの特別なキーワードではなく、else の後ろに if 文を続けて書いている形です。そのため、C#では else と if を分けて書く必要があります。
1-2. 「elseif」と書くとエラーになる理由
C#には if、else、switch などの条件分岐に使うキーワードがありますが、elseif というキーワードは定義されていません。
そのため、次のように書くとコンパイルエラーになります。
C#int number = 10;
if (number > 0)
{
Console.WriteLine("正の数です");
}
elseif (number < 0)
{
Console.WriteLine("負の数です");
}
else
{
Console.WriteLine("0です");
}
正しくは次のように書きます。
C#int number = 10;
if (number > 0)
{
Console.WriteLine("正の数です");
}
else if (number < 0)
{
Console.WriteLine("負の数です");
}
else
{
Console.WriteLine("0です");
}
C#では elseif を1つの単語として認識できないため、「その名前は現在のコンテキストに存在しません」のようなエラーや構文エラーが発生します。
1-3. PHP・VB・Pythonなど他言語との違い
elseif と書きたくなる理由のひとつは、他のプログラミング言語では似た書き方が使われるからです。
たとえば、PHPでは elseif が使えます。
PHPif ($score >= 90) {
echo "A";
} elseif ($score >= 70) {
echo "B";
} else {
echo "C";
}
VB系の言語では ElseIf のように書く場合があります。
VBIf score >= 90 Then
Console.WriteLine("A")
ElseIf score >= 70 Then
Console.WriteLine("B")
Else
Console.WriteLine("C")
End If
Pythonでは elif を使います。
Pythonif score >= 90:
print("A")
elif score >= 70:
print("B")
else:
print("C")
一方、C#では必ず else if と書きます。
C#if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
else
{
Console.WriteLine("C");
}
言語によって書き方が少しずつ違うため、C#では elseif ではなく else if と覚えておきましょう。
1-4. 検索ユーザーが混乱しやすいポイント
C#初心者が混乱しやすいポイントは、主に次のようなものです。
elseif と else if のどちらが正しいのか分からない、else if の間にスペースが必要なのか分からない、else if と switch の使い分けが分からない、else if を複数書いたときにどの条件が実行されるのか分からない、といった点です。
特に、PHPやPythonなどを先に学んだ人は、C#でも elseif や elif が使えると思ってしまうことがあります。しかし、C#では次のように覚えるのが大切です。
C#// C#ではこれが正しい
else if
C#// C#ではこれは間違い
elseif
2. C#のelse ifの基本構文
2-1. if文の基本形
まずは、C#の if 文の基本形を確認しましょう。
C#if (条件式)
{
// 条件式がtrueのときに実行される処理
}
例として、年齢が20歳以上かどうかを判定してみます。
C#int age = 25;
if (age >= 20)
{
Console.WriteLine("成人です");
}
age >= 20 が true の場合、Console.WriteLine("成人です"); が実行されます。
C#の if 文では、条件式を丸括弧 () で囲む必要があります。また、実行したい処理は波括弧 {} の中に書きます。
2-2. else ifを使った複数条件の書き方
条件が1つだけでなく、複数ある場合に else if を使います。
C#if (条件1)
{
// 条件1がtrueのとき
}
else if (条件2)
{
// 条件1がfalseで、条件2がtrueのとき
}
else if (条件3)
{
// 条件1と条件2がfalseで、条件3がtrueのとき
}
たとえば、点数によって評価を分ける場合は次のように書けます。
C#int score = 82;
if (score >= 90)
{
Console.WriteLine("A評価です");
}
else if (score >= 70)
{
Console.WriteLine("B評価です");
}
else if (score >= 50)
{
Console.WriteLine("C評価です");
}
この場合、score は82なので、score >= 90 は false、score >= 70 は true です。そのため、「B評価です」と表示されます。
2-3. elseで「どの条件にも当てはまらない場合」を処理する
else は、これまでの if や else if の条件にどれも当てはまらなかった場合に実行されます。
C#int score = 40;
if (score >= 90)
{
Console.WriteLine("A評価です");
}
else if (score >= 70)
{
Console.WriteLine("B評価です");
}
else if (score >= 50)
{
Console.WriteLine("C評価です");
}
else
{
Console.WriteLine("不合格です");
}
この例では、score が40なので、どの条件にも当てはまりません。そのため、最後の else が実行されます。
else には条件式を書きません。
C#else
{
// どの条件にも当てはまらない場合
}
次のように else に条件を書くことはできません。
C#else (score < 50) // エラー
{
Console.WriteLine("不合格です");
}
条件を書きたい場合は else if を使います。
C#else if (score < 50)
{
Console.WriteLine("不合格です");
}
2-4. else ifを使うときの全体の流れ
else if を使った条件分岐では、条件は上から順番に判定されます。
C#int score = 75;
if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
else if (score >= 50)
{
Console.WriteLine("C");
}
else
{
Console.WriteLine("D");
}
このコードの流れは次の通りです。
まず、score >= 90 を判定します。75は90以上ではないため false です。次に、score >= 70 を判定します。75は70以上なので true です。この時点で「B」が表示されます。
一度どれかの条件に当てはまると、それ以降の else if や else は実行されません。
つまり、else if は「上から順番に確認して、最初に当てはまった処理だけを実行する」仕組みです。
3. else ifの具体的な使い方をサンプルコードで解説
3-1. 数値の大小で処理を分ける例
数値の大小を判定する場合、else if はよく使われます。
C#int number = 0;
if (number > 0)
{
Console.WriteLine("正の数です");
}
else if (number < 0)
{
Console.WriteLine("負の数です");
}
else
{
Console.WriteLine("0です");
}
この例では、number の値によって表示内容を変えています。
number > 0 なら正の数、number < 0 なら負の数、それ以外なら0です。
else は「正の数でも負の数でもない場合」を受け持っているため、結果的に0の場合の処理になります。
3-2. 文字列の値で処理を分ける例
else if は、文字列の値を判定するときにも使えます。
C#string command = "start";
if (command == "start")
{
Console.WriteLine("処理を開始します");
}
else if (command == "stop")
{
Console.WriteLine("処理を停止します");
}
else if (command == "restart")
{
Console.WriteLine("処理を再起動します");
}
else
{
Console.WriteLine("不明なコマンドです");
}
文字列を比較するときは、== を使います。
C#command == "start"
ただし、大文字と小文字は区別されます。
C#string command = "Start";
if (command == "start")
{
Console.WriteLine("開始");
}
else
{
Console.WriteLine("一致しません");
}
この場合、"Start" と "start" は別の文字列として扱われるため、一致しません。
大文字小文字を区別せずに比較したい場合は、たとえば次のように書けます。
C#string command = "Start";
if (command.ToLower() == "start")
{
Console.WriteLine("処理を開始します");
}
else
{
Console.WriteLine("不明なコマンドです");
}
3-3. bool型の条件で処理を分ける例
bool 型は、true または false を表す型です。
C#bool isLoggedIn = true;
bool isAdmin = false;
if (isLoggedIn && isAdmin)
{
Console.WriteLine("管理者としてログインしています");
}
else if (isLoggedIn)
{
Console.WriteLine("一般ユーザーとしてログインしています");
}
else
{
Console.WriteLine("ログインしていません");
}
この例では、ログイン状態と管理者権限によって処理を分けています。
isLoggedIn && isAdmin は、「ログインしていて、かつ管理者である」という意味です。
bool型の変数は、それ自体が条件式になります。
C#if (isLoggedIn)
{
Console.WriteLine("ログイン中です");
}
次のように書くこともできますが、初心者のうちは少し冗長です。
C#if (isLoggedIn == true)
{
Console.WriteLine("ログイン中です");
}
一般的には、bool型の変数はそのまま条件式に使うことが多いです。
3-4. 複数条件を&&・||で組み合わせる例
C#では、複数の条件を組み合わせるときに && や || を使います。
&& は「かつ」、|| は「または」を意味します。
C#int age = 25;
bool hasTicket = true;
if (age >= 18 && hasTicket)
{
Console.WriteLine("入場できます");
}
else if (age < 18)
{
Console.WriteLine("18歳未満は入場できません");
}
else
{
Console.WriteLine("チケットが必要です");
}
この例では、18歳以上で、かつチケットを持っている場合に入場できます。
次は || の例です。
C#string role = "admin";
if (role == "admin" || role == "manager")
{
Console.WriteLine("管理画面にアクセスできます");
}
else
{
Console.WriteLine("アクセス権限がありません");
}
この場合、role が "admin" または "manager" であれば、管理画面にアクセスできます。
複数条件を組み合わせるときは、条件が複雑になりすぎないように注意しましょう。
C#if ((age >= 18 && hasTicket) || role == "admin")
{
Console.WriteLine("入場できます");
}
このように丸括弧を使うと、条件のまとまりが分かりやすくなります。
3-5. 入力値チェックでelse ifを使う例
else if は、入力値のチェックでもよく使われます。
C#Console.Write("名前を入力してください: ");
string name = Console.ReadLine();
if (string.IsNullOrEmpty(name))
{
Console.WriteLine("名前が入力されていません");
}
else if (name.Length < 2)
{
Console.WriteLine("名前は2文字以上で入力してください");
}
else if (name.Length > 20)
{
Console.WriteLine("名前は20文字以内で入力してください");
}
else
{
Console.WriteLine($"こんにちは、{name}さん");
}
この例では、入力された名前について次の順番でチェックしています。
まず、空文字やnullではないかを確認します。次に、文字数が短すぎないかを確認します。さらに、文字数が長すぎないかを確認します。すべて問題なければ、最後の else で正常な処理を行います。
入力値チェックでは、エラー条件を先に if や else if で判定し、最後に正常な処理を書くと分かりやすくなります。
4. C#のelse ifでよくあるエラーと対処法
4-1. 「elseif」と続けて書いてしまう
もっとも多いミスは、else if を elseif と続けて書いてしまうことです。
間違いの例です。
C#int score = 80;
if (score >= 90)
{
Console.WriteLine("A");
}
elseif (score >= 70)
{
Console.WriteLine("B");
}
正しくは次のように書きます。
C#int score = 80;
if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
C#では elseif というキーワードはありません。必ず else if と分けて書きましょう。
4-2. 条件式の丸括弧を忘れる
C#の if や else if では、条件式を丸括弧 () で囲む必要があります。
間違いの例です。
C#int age = 20;
if age >= 20
{
Console.WriteLine("成人です");
}
正しくは次のように書きます。
C#int age = 20;
if (age >= 20)
{
Console.WriteLine("成人です");
}
else if でも同じです。
C#else if (age >= 13)
{
Console.WriteLine("中学生以上です");
}
Pythonなどでは丸括弧を省略する書き方が一般的ですが、C#では丸括弧が必要です。
4-3. 波括弧{}の範囲を間違える
波括弧 {} の範囲を間違えると、意図しない処理になったり、エラーになったりします。
間違いの例です。
C#int score = 80;
if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
else
{
Console.WriteLine("C");
}
このコードでは、else if のブロックを閉じる } が不足しています。
正しくは次のように書きます。
C#int score = 80;
if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
else
{
Console.WriteLine("C");
}
波括弧は、どこからどこまでが1つの処理ブロックなのかを表します。インデントを整えると、波括弧の対応関係が分かりやすくなります。
4-4. セミコロンを不要な場所に書いてしまう
if や else if の条件式の直後にセミコロンを書いてしまうミスもあります。
間違いの例です。
C#int score = 80;
if (score >= 70);
{
Console.WriteLine("合格です");
}
このコードでは、if (score >= 70); のセミコロンによって、if 文の処理がそこで終わってしまいます。そのため、波括弧内の処理が条件に関係なく実行される可能性があります。
正しくは次のように書きます。
C#int score = 80;
if (score >= 70)
{
Console.WriteLine("合格です");
}
else if でも同じです。
C#else if (score >= 50);
{
Console.WriteLine("再試験です");
}
このような書き方は避けましょう。
正しくは次の通りです。
C#else if (score >= 50)
{
Console.WriteLine("再試験です");
}
if、else if、else の行の最後には、基本的にセミコロンを書きません。
4-5. 「=」と「==」を間違える
条件式で値が等しいかどうかを比較するときは、== を使います。
間違いの例です。
C#int number = 10;
if (number = 10)
{
Console.WriteLine("10です");
}
= は代入を意味します。比較ではありません。
正しくは次のように書きます。
C#int number = 10;
if (number == 10)
{
Console.WriteLine("10です");
}
文字列を比較するときも同じです。
C#string command = "start";
if (command == "start")
{
Console.WriteLine("開始します");
}
else if (command == "stop")
{
Console.WriteLine("停止します");
}
C#では、条件式は最終的に bool 型、つまり true か false になる必要があります。= と == の違いは初心者がよく間違えるため、しっかり区別しましょう。
4-6. 条件式がbool型になっていない
C#の if や else if の条件式は、必ず bool 型でなければなりません。
間違いの例です。
C#int count = 5;
if (count)
{
Console.WriteLine("データがあります");
}
C#では、数値をそのまま条件式として使うことはできません。
正しくは、比較式にします。
C#int count = 5;
if (count > 0)
{
Console.WriteLine("データがあります");
}
文字列もそのまま条件式にはできません。
C#string name = "Taro";
if (name) // エラー
{
Console.WriteLine("名前があります");
}
正しくは次のように書きます。
C#string name = "Taro";
if (!string.IsNullOrEmpty(name))
{
Console.WriteLine("名前があります");
}
C#の条件式は、必ず true または false になるように書きましょう。
5. else ifを使うときの注意点
5-1. 条件は上から順番に判定される
else if の条件は、上から順番に判定されます。
C#int score = 85;
if (score >= 80)
{
Console.WriteLine("80点以上です");
}
else if (score >= 60)
{
Console.WriteLine("60点以上です");
}
else
{
Console.WriteLine("60点未満です");
}
この場合、score は85なので、最初の score >= 80 が true になります。その時点で処理が実行され、下の else if は判定されません。
たとえ score >= 60 も true であっても、すでに上の条件に当てはまっているため実行されないのです。
5-2. 条件の順番によって結果が変わる
else if では、条件の順番がとても重要です。
たとえば、次のコードを見てください。
C#int score = 95;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else if (score >= 90)
{
Console.WriteLine("高得点です");
}
score は95なので、score >= 90 にも当てはまります。しかし、先に score >= 60 が判定されて true になるため、「合格です」と表示されます。
「高得点です」と表示したい場合は、より限定的な条件を先に書きます。
C#int score = 95;
if (score >= 90)
{
Console.WriteLine("高得点です");
}
else if (score >= 60)
{
Console.WriteLine("合格です");
}
範囲が重なる条件を書く場合は、狭い条件や優先したい条件を上に書くのが基本です。
5-3. 重複する条件を書かない
同じ意味の条件や、すでに上の条件に含まれている条件を書くと、コードが分かりにくくなります。
C#int age = 25;
if (age >= 20)
{
Console.WriteLine("成人です");
}
else if (age >= 18)
{
Console.WriteLine("18歳以上です");
}
このコード自体は間違いではありません。ただし、age が25の場合は最初の条件で処理が終わります。else if (age >= 18) は、18歳または19歳のときだけ実行されます。
意図が分かりやすいように書くなら、次のように範囲を明確にする方法もあります。
C#int age = 25;
if (age >= 20)
{
Console.WriteLine("成人です");
}
else if (age >= 18 && age < 20)
{
Console.WriteLine("18歳以上20歳未満です");
}
else
{
Console.WriteLine("18歳未満です");
}
ただし、上から順番に判定されることを理解していれば、age < 20 は省略できます。
読み手が誤解しないように、条件の重複や順番には注意しましょう。
5-4. else ifを増やしすぎると読みにくくなる
else if は便利ですが、数が多くなると読みにくくなります。
C#if (command == "start")
{
Console.WriteLine("開始");
}
else if (command == "stop")
{
Console.WriteLine("停止");
}
else if (command == "pause")
{
Console.WriteLine("一時停止");
}
else if (command == "restart")
{
Console.WriteLine("再起動");
}
else if (command == "status")
{
Console.WriteLine("状態確認");
}
else
{
Console.WriteLine("不明なコマンド");
}
この程度ならまだ読めますが、条件がさらに増えると管理しにくくなります。
同じ変数の値によって処理を分けている場合は、switch 文や switch 式を使ったほうが読みやすいことがあります。
C#switch (command)
{
case "start":
Console.WriteLine("開始");
break;
case "stop":
Console.WriteLine("停止");
break;
case "pause":
Console.WriteLine("一時停止");
break;
default:
Console.WriteLine("不明なコマンド");
break;
}
条件分岐が多くなってきたら、else if のままでよいか見直しましょう。
5-5. 最後にelseを書くべきケースと不要なケース
else は必ず必要ではありません。
たとえば、特定の条件に当てはまる場合だけ処理したいなら、else は不要です。
C#int age = 25;
if (age >= 20)
{
Console.WriteLine("成人向けコンテンツを表示します");
}
一方で、どの条件にも当てはまらなかった場合の処理が必要なら、else を書くべきです。
C#int score = 45;
if (score >= 80)
{
Console.WriteLine("優秀です");
}
else if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
特に、入力値チェックや分類処理では、最後に else を書いて想定外の値を処理すると安全です。
C#string role = "guest";
if (role == "admin")
{
Console.WriteLine("管理者画面を表示します");
}
else if (role == "user")
{
Console.WriteLine("ユーザー画面を表示します");
}
else
{
Console.WriteLine("権限が不明です");
}
else を書くべきかどうかは、「どの条件にも当てはまらなかった場合に何か処理が必要か」で判断しましょう。
6. else ifを読みやすく書くコツ
6-1. 条件式をシンプルにする
条件式が長すぎると、何を判定しているのか分かりにくくなります。
C#if (age >= 20 && hasLicense && !isSuspended && country == "JP")
{
Console.WriteLine("運転できます");
}
この程度なら読めますが、さらに条件が増えると理解しづらくなります。
条件に意味のある名前を付けると、読みやすくなります。
C#bool isAdult = age >= 20;
bool canDrive = hasLicense && !isSuspended;
bool isJapan = country == "JP";
if (isAdult && canDrive && isJapan)
{
Console.WriteLine("運転できます");
}
条件式が複雑になったら、bool型の変数に分けることを検討しましょう。
6-2. ネストを深くしすぎない
if の中にさらに if を書くことをネストと呼びます。
C#if (isLoggedIn)
{
if (isAdmin)
{
if (hasPermission)
{
Console.WriteLine("管理画面を表示します");
}
}
}
ネストが深くなると、コードの流れが追いにくくなります。
&& を使って条件をまとめると、シンプルにできます。
C#if (isLoggedIn && isAdmin && hasPermission)
{
Console.WriteLine("管理画面を表示します");
}
また、条件に当てはまらない場合を先に処理する方法もあります。
C#if (!isLoggedIn)
{
Console.WriteLine("ログインしてください");
}
else if (!isAdmin)
{
Console.WriteLine("管理者権限がありません");
}
else if (!hasPermission)
{
Console.WriteLine("権限が不足しています");
}
else
{
Console.WriteLine("管理画面を表示します");
}
ネストが深くなってきたら、else if やガード節で整理できないか考えましょう。
6-3. ガード節を使って処理を整理する
ガード節とは、処理を続けられない条件を先に判定して、早めに処理を抜ける書き方です。
たとえば、メソッドの中で入力値をチェックする場合に使えます。
C#void RegisterUser(string name, int age)
{
if (string.IsNullOrEmpty(name))
{
Console.WriteLine("名前を入力してください");
return;
}
if (age < 0)
{
Console.WriteLine("年齢が正しくありません");
return;
}
if (age < 18)
{
Console.WriteLine("18歳未満は登録できません");
return;
}
Console.WriteLine("登録しました");
}
このように、エラー条件を先に処理して return すると、正常な処理を最後にすっきり書けます。
else if を使うと次のようにも書けます。
C#void RegisterUser(string name, int age)
{
if (string.IsNullOrEmpty(name))
{
Console.WriteLine("名前を入力してください");
}
else if (age < 0)
{
Console.WriteLine("年齢が正しくありません");
}
else if (age < 18)
{
Console.WriteLine("18歳未満は登録できません");
}
else
{
Console.WriteLine("登録しました");
}
}
どちらも間違いではありません。ただし、条件が多い場合は、ガード節を使ったほうが読みやすくなることがあります。
6-4. 条件の意味が分かる変数名を使う
条件式を読みやすくするには、変数名も重要です。
分かりにくい例です。
C#bool flag = true;
if (flag)
{
Console.WriteLine("処理を実行します");
}
flag だけでは、何を表しているのか分かりません。
分かりやすい例です。
C#bool isUserLoggedIn = true;
if (isUserLoggedIn)
{
Console.WriteLine("処理を実行します");
}
条件に使うbool変数は、次のような名前にすると意味が伝わりやすくなります。
C#bool isActive = true;
bool hasPermission = false;
bool canEdit = true;
bool shouldSendEmail = false;
is、has、can、should などから始めると、trueまたはfalseを表す変数だと分かりやすくなります。
6-5. コメントに頼りすぎずコードで意図を伝える
コメントは便利ですが、コメントがないと理解できないコードは読みにくいコードです。
たとえば、次のコードはコメントがないと意味が分かりにくいです。
C#if (x >= 20 && y == 1)
{
Console.WriteLine("OK");
}
変数名を分かりやすくすると、コメントが少なくても意図が伝わります。
C#if (age >= 20 && isMember)
{
Console.WriteLine("会員向け成人コンテンツを表示します");
}
さらに条件を変数にすると、より読みやすくなります。
C#bool canViewMemberContent = age >= 20 && isMember;
if (canViewMemberContent)
{
Console.WriteLine("会員向け成人コンテンツを表示します");
}
コメントを書くこと自体は悪くありません。しかし、まずはコードの名前や構造で意味が伝わるようにすることが大切です。
7. else if以外の条件分岐との使い分け
7-1. switch文を使ったほうがよいケース
同じ変数の値によって処理を分ける場合は、switch 文が向いていることがあります。
else if の例です。
C#string command = "start";
if (command == "start")
{
Console.WriteLine("開始します");
}
else if (command == "stop")
{
Console.WriteLine("停止します");
}
else if (command == "pause")
{
Console.WriteLine("一時停止します");
}
else
{
Console.WriteLine("不明なコマンドです");
}
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;
}
command の値によって処理を分けていることが分かりやすくなります。
一方、数値の範囲判定や複雑な条件を組み合わせる場合は、else if のほうが自然です。
C#if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
else
{
Console.WriteLine("C");
}
7-2. switch式を使ったほうがよいケース
C#では、値を返す条件分岐として switch 式も使えます。
たとえば、コマンドに応じてメッセージを作る場合です。
C#string command = "start";
string message = command switch
{
"start" => "開始します",
"stop" => "停止します",
"pause" => "一時停止します",
_ => "不明なコマンドです"
};
Console.WriteLine(message);
switch 式は、条件に応じて値を返したいときに便利です。
else if で書くと次のようになります。
C#string command = "start";
string message;
if (command == "start")
{
message = "開始します";
}
else if (command == "stop")
{
message = "停止します";
}
else if (command == "pause")
{
message = "一時停止します";
}
else
{
message = "不明なコマンドです";
}
Console.WriteLine(message);
このように、単純に値を代入するだけなら、switch 式のほうが短く書ける場合があります。
7-3. 三項演算子を使ったほうがよいケース
条件によって値を1つ選ぶだけなら、三項演算子を使うこともできます。
C#int score = 80;
string result = score >= 60 ? "合格" : "不合格";
Console.WriteLine(result);
これは次の if 文と同じ意味です。
C#int score = 80;
string result;
if (score >= 60)
{
result = "合格";
}
else
{
result = "不合格";
}
Console.WriteLine(result);
三項演算子は短く書けますが、条件が複雑になると読みにくくなります。
読みにくい例です。
C#string result = score >= 90 ? "A" : score >= 70 ? "B" : score >= 50 ? "C" : "D";
このような場合は、else if のほうが分かりやすいです。
C#string result;
if (score >= 90)
{
result = "A";
}
else if (score >= 70)
{
result = "B";
}
else if (score >= 50)
{
result = "C";
}
else
{
result = "D";
}
三項演算子は、シンプルな二択に使うのがおすすめです。
7-4. if・else if・switchの使い分け早見表
| 書き方 | 向いているケース | 例 |
|---|---|---|
| if | 条件が1つだけ | 20歳以上なら表示する |
| if / else | 条件が2択 | 合格か不合格か |
| else if | 複数の条件や範囲を判定する | 点数でA・B・Cを分ける |
| switch文 | 同じ変数の値で処理を分ける | コマンド名で処理を分ける |
| switch式 | 条件に応じて値を返す | 値からメッセージを作る |
| 三項演算子 | 短い二択で値を返す | 合格なら「OK」、不合格なら「NG」 |
else if は、範囲判定や複数条件の組み合わせに向いています。
C#if (temperature >= 35)
{
Console.WriteLine("猛暑日です");
}
else if (temperature >= 30)
{
Console.WriteLine("真夏日です");
}
else if (temperature >= 25)
{
Console.WriteLine("夏日です");
}
else
{
Console.WriteLine("過ごしやすい気温です");
}
一方、同じ変数の決まった値を比較するだけなら、switch も検討しましょう。
8. 初心者向け:else ifの理解を深める練習問題
8-1. 点数によって成績を判定する問題
次の条件で、点数から成績を表示するプログラムを作ってみましょう。
90点以上なら「A」、70点以上なら「B」、50点以上なら「C」、50点未満なら「D」と表示します。
考え方としては、点数の高い条件から順番に判定します。
C#int score = 85;
if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
else if (score >= 50)
{
Console.WriteLine("C");
}
else
{
Console.WriteLine("D");
}
score が85の場合、score >= 90 は false、score >= 70 は true なので、「B」と表示されます。
8-2. 年齢によって料金区分を判定する問題
次は、年齢によって料金区分を分けてみましょう。
6歳未満なら「無料」、6歳以上13歳未満なら「子ども料金」、13歳以上65歳未満なら「通常料金」、65歳以上なら「シニア料金」とします。
C#int age = 30;
if (age < 6)
{
Console.WriteLine("無料です");
}
else if (age < 13)
{
Console.WriteLine("子ども料金です");
}
else if (age < 65)
{
Console.WriteLine("通常料金です");
}
else
{
Console.WriteLine("シニア料金です");
}
このコードでは、上から順番に判定されます。
age < 6 に当てはまらなかった時点で、年齢は6歳以上と考えられます。そのため、次の条件は age >= 6 && age < 13 と書かなくても、age < 13 だけで意味が通じます。
8-3. 入力された文字列によって処理を分ける問題
ユーザーが入力した文字列によって処理を分ける例です。
start なら開始、stop なら停止、help ならヘルプ表示、それ以外なら不明なコマンドと表示します。
C#Console.Write("コマンドを入力してください: ");
string command = Console.ReadLine();
if (command == "start")
{
Console.WriteLine("開始します");
}
else if (command == "stop")
{
Console.WriteLine("停止します");
}
else if (command == "help")
{
Console.WriteLine("使い方を表示します");
}
else
{
Console.WriteLine("不明なコマンドです");
}
このように、入力値に応じて処理を切り替える場面でも else if はよく使われます。
実用的にするなら、大文字小文字の違いや空文字も考慮するとよいでしょう。
C#Console.Write("コマンドを入力してください: ");
string command = Console.ReadLine();
if (string.IsNullOrEmpty(command))
{
Console.WriteLine("コマンドが入力されていません");
}
else if (command.ToLower() == "start")
{
Console.WriteLine("開始します");
}
else if (command.ToLower() == "stop")
{
Console.WriteLine("停止します");
}
else if (command.ToLower() == "help")
{
Console.WriteLine("使い方を表示します");
}
else
{
Console.WriteLine("不明なコマンドです");
}
8-4. 解答例とコードの読み方
最後に、少し実践的な入力チェックの例を見てみましょう。
C#Console.Write("点数を入力してください: ");
string input = Console.ReadLine();
if (string.IsNullOrEmpty(input))
{
Console.WriteLine("点数が入力されていません");
}
else
{
int score = int.Parse(input);
if (score < 0 || score > 100)
{
Console.WriteLine("点数は0〜100の範囲で入力してください");
}
else if (score >= 90)
{
Console.WriteLine("評価はAです");
}
else if (score >= 70)
{
Console.WriteLine("評価はBです");
}
else if (score >= 50)
{
Console.WriteLine("評価はCです");
}
else
{
Console.WriteLine("評価はDです");
}
}
このコードでは、まず入力が空かどうかを確認しています。入力がある場合だけ、文字列を数値に変換しています。
その後、点数が0〜100の範囲に入っているかをチェックします。範囲外ならエラーメッセージを表示します。
点数が正しい範囲内であれば、else if を使って成績を判定します。
ただし、int.Parse は数値に変換できない文字列が入力されるとエラーになります。より安全に書くなら、int.TryParse を使います。
C#Console.Write("点数を入力してください: ");
string input = Console.ReadLine();
if (!int.TryParse(input, out int score))
{
Console.WriteLine("数値を入力してください");
}
else if (score < 0 || score > 100)
{
Console.WriteLine("点数は0〜100の範囲で入力してください");
}
else if (score >= 90)
{
Console.WriteLine("評価はAです");
}
else if (score >= 70)
{
Console.WriteLine("評価はBです");
}
else if (score >= 50)
{
Console.WriteLine("評価はCです");
}
else
{
Console.WriteLine("評価はDです");
}
このように、else if は入力チェックと相性がよく、初心者でも実用的なコードを書きやすい構文です。
9. C#のelse ifに関するよくある質問
9-1. C#でelseifと書ける方法はある?
通常のC#では、elseif と書く方法はありません。
C#の正しい構文は else if です。
C#else if (条件)
{
// 処理
}
elseif はC#のキーワードではないため、次のように書くとエラーになります。
C#elseif (条件)
{
// エラー
}
C#を書くときは、必ず else と if を分けて書きましょう。
9-2. else ifはいくつまで書ける?
文法上は、else if を複数書くことができます。
C#if (condition1)
{
}
else if (condition2)
{
}
else if (condition3)
{
}
else if (condition4)
{
}
else
{
}
ただし、数が多くなりすぎると読みにくくなります。
目安として、同じ変数の値を何度も比較している場合は、switch 文や switch 式を検討するとよいでしょう。
C#switch (command)
{
case "start":
Console.WriteLine("開始");
break;
case "stop":
Console.WriteLine("停止");
break;
default:
Console.WriteLine("不明");
break;
}
else if はいくつでも書けるからといって、増やしすぎないことが大切です。
9-3. elseは必ず必要?
else は必ず必要ではありません。
条件に当てはまるときだけ処理したい場合は、if だけで問題ありません。
C#if (isLoggedIn)
{
Console.WriteLine("マイページを表示します");
}
複数条件でも、最後の else は省略できます。
C#if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
ただし、どの条件にも当てはまらなかった場合の処理が必要なら、else を書きましょう。
C#if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
else
{
Console.WriteLine("C以下");
}
9-4. else ifとifを連続で書く違いは?
else if と if を連続で書く場合では、判定のされ方が違います。
else if の場合です。
C#int score = 95;
if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
この場合、最初の条件が true なら、次の else if は判定されません。表示されるのは「A」だけです。
一方、if を連続で書く場合です。
C#int score = 95;
if (score >= 90)
{
Console.WriteLine("A");
}
if (score >= 70)
{
Console.WriteLine("B");
}
この場合、2つの if は別々に判定されます。score が95なら、どちらの条件も true なので、「A」と「B」の両方が表示されます。
どれか1つだけ実行したい場合は else if を使います。複数の条件をそれぞれ独立して判定したい場合は、if を連続で使います。
9-5. else ifとswitchはどちらを使うべき?
範囲判定や複雑な条件を使う場合は、else if が向いています。
C#if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 70)
{
Console.WriteLine("B");
}
else if (score >= 50)
{
Console.WriteLine("C");
}
else
{
Console.WriteLine("D");
}
同じ変数の値を比較するだけなら、switch が向いています。
C#switch (command)
{
case "start":
Console.WriteLine("開始");
break;
case "stop":
Console.WriteLine("停止");
break;
case "help":
Console.WriteLine("ヘルプ");
break;
default:
Console.WriteLine("不明なコマンド");
break;
}
迷ったときは、次のように考えると分かりやすいです。
点数や年齢のように「範囲」で分けるなら else if、コマンド名や種類のように「決まった値」で分けるなら switch が適しています。
まとめ
C#には elseif というキーワードは存在しません。複数条件を分岐させる場合は、必ず else if と書きます。
C#if (条件1)
{
// 条件1がtrueの場合
}
else if (条件2)
{
// 条件2がtrueの場合
}
else
{
// どの条件にも当てはまらない場合
}
elseif と続けて書くと、C#ではエラーになります。
C#elseif (条件) // C#では間違い
正しくは次の形です。
C#else if (条件) // C#では正しい
else if は、上から順番に条件を判定し、最初に true になったブロックだけを実行します。そのため、条件の順番がとても重要です。
また、else if を使うときは、丸括弧 () の付け忘れ、波括弧 {} の範囲ミス、不要なセミコロン、= と == の間違いにも注意しましょう。
条件が少ない場合や範囲判定には else if が便利ですが、同じ変数の値で分岐する場合は switch 文や switch 式のほうが読みやすいこともあります。
C#の条件分岐では、まず if、else if、else の基本を正しく理解することが大切です。c# elseif と検索して迷った場合は、「C#では elseif ではなく else if」と覚えておきましょう。

