switch文の使い方を知りたい。。。
この記事では、C# で switch 文の使い方をサンプルコードを交えて分かりやすく紹解説ています。
同じように条件分岐する構文の if 文との使い分けについても記載していますので、ぜひ参考にしてみて下さい。
オススメの参考書
C#の使い方が丁寧に解説しており、「基礎からしっかりと学びたい」という初心者の方にオススメの一冊です。サンプルコードも記載してあり、各章の最後に復習問題があるので理解度を確認しながら読み進めることができます。新しい C# のバージョンにも対応している書籍です。
switch文とは
C# の switch 文は、複数の条件に基づいてプログラムを分岐するために使います。
具体的にいうと「ある値を対象にして、その値が○○なら処理 A、△△なら処理 Bを、□□なら処理 C を実行する」というような場面で使います。
フローチャートで表現すると次のようになります。
switch文の基本構文
switch 文は次のような構文になっています。
switch(条件)
{
case 値1:
処理
break;
case 値2:
処理
break;
・
・
・
default:
処理
break;
}
switch 文のポイントは次の通りです。
- switch 文で指定した条件と、case 文で指定した値が一致したら、その case 内の処理が実行されます。
- case 文で指定したどの値にも一致しない場合、default 文の処理が実行されます。(default は省略可能です。)
- break に達したら、switch 文を抜けるので、他の case の処理は実行されません。
- case 内に break がない場合、エラーになります。(フォールスルーの禁止)
C や C++、Java や JavaScript は switch 文で break 文を省略した書き方(フォールスルー)ができますが、C# はフォールスルーが禁止されています。break 文がないとエラーになるので注意しましょう。
if文とswitch文の使い分け
switch 文と同じように条件分岐する構文として、if 文があります。
使い分けですが、1つの値に応じて複数の条件分岐をするときは switch 文、それ以外の場合は if 文を使うといいでしょう。
switch 文では2つ以上の値が絡む複雑な条件分岐はできるものの分かりづらくなるので、素直に if 文を使って条件分岐させた方がいいと思います。
if(a < 0 && b == 1 || c == 3)
{
//条件に一致したら処理を実行する
}
switch文で使えるデータ型
switch文 の条件や case 文の値で指定できるのは、以下のデータ型です。
- 整数型(byte、short、int、long)
- 文字型(char)
- 列挙型(enum)
- 文字列型(string)
- 浮動小数点型(float、double)
- ブール型(bool)
switch文のサンプルコード
switch文の構文を使って、プログラムを確認してみましょう。
サンプルコード①
int num = 3;
switch (num)
{
case 1:
Console.WriteLine("処理Aが実行される");
break;
case 2:
Console.WriteLine("処理Bが実行される");
break;
case 3:
Console.WriteLine("処理Cが実行される");
break;
default:
Console.WriteLine("処理Dが実行される");
break;
}
11行目のcase 3:
は変数num
の値と一致するので、その次の処理であるConsole.WriteLine("処理Cが実行される");
が実行されます。
13行目のbreak
で switch 文を抜けます。
上記のコードを実行すると、結果は次のようになります。
処理Cが実行される
サンプルコード②
private enum PLAYER_STATE
{
WALK,
JUMP,
ATTACK
}
PLAYER_STATE state = 0;
switch (state)
{
case PLAYER_STATE.WALK:
Console.WriteLine("処理Aが実行される");
break;
case PLAYER_STATE.JUMP:
Console.WriteLine("処理Bが実行される");
break;
case PLAYER_STATE.ATTACK:
Console.WriteLine("処理Cが実行される");
break;
default:
Console.WriteLine("処理Dが実行される");
break;
}
switch 文は enum(列挙体) を使うことができます。enum とは、定数を列挙してまとめたものです。
5行目、8行目、11行目のように条件が定数になると、switch 文の条件がどんな条件なのかという事がコメントがなくても分かるようになります。定数を使うことでプログラムがすごく読みやすくなります。
上記のコードを実行すると、結果は次のようになります。
処理Aが実行される
サンプルコード③
object num = 2;
switch (num)
{
// 定数パターン
case 1:
Console.WriteLine("処理Aが実行される");
break;
// 定数と論理(or)パターン
case 2 or 3 or 4:
Console.WriteLine("処理Bが実行される");
break;
// 比較演算と論理(and)パターン
case > 5 and < 10:
Console.WriteLine("処理Cが実行される");
break;
// 型パターン
case int:
Console.WriteLine("処理Dが実行される");
break;
// 型と論理(or)パターン
case char or string:
Console.WriteLine("処理Eが実行される");
break;
default:
Console.WriteLine("処理Fが実行される");
break;
}
C# 7.0 以降はパターンマッチング機能を使用することができます。論理パターン(or
/and
)や型パターン(int
/double
/string
等)、比較演算パターン(<
/>
/<=
/>=
)などを switch 文の条件式として指定ができます。
上記のコードを実行すると、結果は次のようになります。
処理Bが実行される
サンプルコード④
int num = 2;
string str = "b";
switch (num)
{
case 1 when str == "a":
Console.WriteLine("処理Aが実行される");
break;
case 2 when str == "b":
Console.WriteLine("処理Bが実行される");
break;
case 3 when str == "c":
Console.WriteLine("処理Cが実行される");
break;
default:
Console.WriteLine("処理Dが実行される");
break;
}
C# 7.0 以降は case の後に when を使用して条件を追加することができます。
6行目、9行目、12行目when
を使って、変数str
の条件式を追加しています。
上記のコードを実行すると、結果は次のようになります。
処理Bが実行される
サンプルコード⑤
object num = 3;
var result = num switch
{
1 => "処理Aが実行される",
2 => "処理Bが実行される",
3 => "処理Cが実行される",
_ => "処理Dが実行される",
};
Console.WriteLine(result);
C# 8.0 以降は switch 式を使用することができます。従来の switch 文と比較してみるとcase
とbreak
の記述が不要になり、スマートになっています。
default
の代わりに_
を記述するのがポイントです。
上記のコードを実行すると、結果は次のようになります。
処理Cが実行される
まとめ
この記事では、C# で switch 文の使い方とサンプルコードをいつくか紹介しました。
- switch 文を使うことで、1つの値と指定した条件を比較して条件分岐できる。
- break に達したら、switch 文を抜ける。
- default は条件に一致しなかった時に処理される。
1つの値に応じて複数の条件分岐をするときは switch 文を使うという事を覚えておくといいでしょう。
switch 文はよく使う構文の1つなので、ぜひ理解しておきましょう。
以上、最後まで読んで頂きありがとうございました。