プログラミング言語C#におけるswitch文について、C#初心者向けにエンジニアの筆者が解説します。
switch文はif文と似ており、よく使われる構文の1つです。
本記事を読めば、C# switch文の書き方、break・defaultとは何か・if文とswitch文の使い分け、フォールスルーの禁止について理解できるでしょう。
ぜひ最後まで読んで、C# switch文を理解してください!
INDEX
C# switch文の書き方
Switch文は、変数などで受け取った変数値の結果を元に、実行する処理を変えたいときに使用します。先ず、Switch文の構文は以下の通りです。
1 2 3 4 5 6 7 |
//サンプルコード1 switch( 変数 ) { case 値A: //変数が値Aのとき実行される 文A break; // 文Aの実行が終わったらswitchから抜ける。 case 値B: //変数が値Bのとき実 |
\21万以上のオンラインコースから選べる!/
Udemyで講座を探すフォールスルー
1 2 3 4 5 6 7 |
行される 文B break; // 文Bの実行が終わったらswitchから抜ける。 default: //上記の条件に変数がどれも当てはまらない場合に実行される。 文C break; // 文Cの実行が終わったらswitchから抜ける。 } |
switch文
指定された変数値を元に一致するcase値の制御文を実行します。
値には、整数型(int)もしくは文字列は使用できますが、floatやdouble型などの浮動小数点は使用できません。
break文
switchのブロックから抜けます。break文の後は実行されません。
for,while文などの場合はループから脱出するときに使われます。
default文
変数が全てのcaseの値に一致しない場合に実行されます。
デフォルトで実施する処理がない場合は,break;のみを記載しましょう。
または、defaultセクションを消すことで何も処理がおこなわれないままSwitch文を抜けることができます。
if文とswitch文の使い分けのポイント
switch文を今回解説していますが、if文でも同じ内容を書くことはもちろん可能です。
使い分けのポイントとしては、
①単純な2分岐であれば、if文を使う
②多分岐(3分岐)以上であればswitch文を使う
多分岐の場合は特にswitch文を使うことでプログラミングのコードの見やすさが向上し管理がしやすくなります。
また、多分岐の場合ではswitch文のほうがif文よりも速いとされています。
C#のswtich文では,条件式の評価結果に整数(int型)以外に文字列(string型)も利用できます。
switch文を使いこなすことができれば、かなり便利です。
実際にswitch文を書いてみよう(int型)
先程、紹介したswitch文の構文を使って、プログラムを書いてみましょう。
以下、サンプルコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//サンプルコード2 int num = 2 switch (num) { case 1: //numが「1」の時に実行する Console.WriteLine("case1が実行されました"); //コンソール画面に「case1が実行されました」と出力する break; //switch文を抜ける case 2: //numが「2」の時に実行する Console.WriteLine("case2が実行されました"); //コンソール画面に「case2が実行されました」と出力する break;//switch文を抜ける default: //numが「1」と「2」以外の時に実行する Console.WriteLine("defaultが実行されました"); //コンソール画面に「defaultが実行されました」と出力する break;//switch文を抜ける } |
1 2 |
//実行結果 case2が実行されました |
変数numで受け取ったint値を元に、実行する内容を変えることができました。
実際にswitch文を書いてみよう(string型)
先程int型でのswitch文を紹介しました。続いては string型でのswitch文の書き方です。
C/C++では整数型(int)のみを制御式の値に使用できますが、文字列の利用できませんでした。
C#ではswitch文の制御値に文字列型の利用が可能です。
それでは、実際にサンプルコードを見て行きましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//サンプルコード3 String str = "りんご"; switch (str) { case "りんご": //strが「りんご」の時に実行する Console.WriteLine("赤色です。"); //コンソール画面に「赤色です」と出力する。 break; //switch文から抜ける case "バナナ": //strが「バナナ」の時に実行する Console.WriteLine("黄色です"); //コンソール画面に「黄色です」と出力する。 break; //switch文から抜ける default: //strが上記以外の場合に実行する Console.WriteLine("何色かわかりません。"); //コンソール画面に「何色かわかりません。」と出力する。 break; //switch文から抜ける } |
1 2 |
//実行結果 りんごは、果物です。 |
String型のstrに文字列が入力されており、その値を元にcase文が実行されています。
C# switch文 フォールスルーの禁止について
C#でのSwitch文では、フォールスルーが禁止されています。
フォールスルーとは、switch文でbreak文を省略した書き方のことです。
まず、C/C++などでは下記のような書き方ができます。
1 2 3 4 5 6 7 8 9 10 11 12 |
//サンプルコード4 int num =1; switch(num){ case 0: printf("ケース0が実行されました"); case 1: //numが「0」でも「1」でも実行される。 printf("ケース1が実行されました"); break; default: printf("デフォルトが実行されました"); break; } |
先程,勉強したcase文のサンプルコード1に似ていますが、case0にbreak文がありません。
これは,break文を書き忘れたのでしょうか?
いいえ、C/C++ではこのような記載ができ、case文が失敗しない限りは次のcase文も実行したいときに書きます。
C/C++では、こちらのコンパイルが可能です。実際に実行すると下記のようになります。
1 2 3 |
//numが0の時 ケース0が実行されました ケース1が実行されました |
1 2 |
//numが1の時 ケース1が実行されました |
1 2 |
//numが2の時 デフォルトが実行されました |
C#では、このフォールスルー書き方が禁止されました。
理由の一つとしては、このフォールスルー処理が意図して書かれたものなのか、間違ってbreak文を書き忘れてしまったのかの判断ができないですよね。
バグの温床となってしまうからです。
C#ではこのコードを実際にコンパイルしようとすると,エラーが出てきます。
C#では、必ずcase文のラベル毎に「break」「goto」「return」のどれかを含めた記述をしましょう。
いかがでしたか?
プログラミング言語C#のswitch文が理解できましたか?繰り返しになりますが、switch文はよく使う構文の1つなので、ぜひ理解しておきましょう。
最新情報・キャンペーン情報発信中