Switch文
出典: フリー百科事典『ウィキペディア(Wikipedia)』
switch文(すいっちぶん)とは、プログラミング言語において条件の値に対応する文を実行するための条件文の一種である。
目次 |
[編集] 文法
[編集] Cおよびそれに類する言語の場合
基本的な構文は以下の通りになる。
switch(条件式) { case 値 : 文 ……… default : 文 }
上記の「case」はいくつでも記述することができる。
この条件文は次のような手順で実行される。
- 条件の値を評価する。
- もし、条件式の値がcaseで指定された値であるなら、その文を実行する。
- 条件式の値がcaseで指定されていなければ、defaultで指定されている文を実行する。
- もしdefaultが記述されていなければ、何も実行せずにswitch文を抜ける。
ここで注意しなければならないのが、caseで実行された後、switch文を抜けずにそれ以降の文も実行される点である(caseはラベルに過ぎないので、次のcaseの前でswitch文を抜けさせる働きはない)。一般的には、次のcaseの分岐へまたがる直前でbreak文を記述する。 このルールはフォールスルー(fall through)と言い、複数の値について同じ動作をさせたい場合に便利であるが、一方でbreak文を書き忘れやすいためしばしばバグの温床として問題視されてきた。 そのためlintでは、意図的にフォールスルーしていることを示す/* FALLTHROUGH */
などのコメントが記述されていない限り、警告を出す。 また、C言語に類するシンタックスを持つ言語でも、C#など次のcaseに落ちない言語も登場している。
上記の例は、if文を羅列することで同様の動作を実現することができる。
if (条件式 == 値){ 文 } else if (条件式 == 値){ 文 } ……… else{ 文 }
[編集] C#
C#ではC言語の構文に加えて「goto case」文が使える
switch (someInteger) { case 0: case 1: return 1; // 変数someIntegerが0か1の時に実行 case 2: someInteger++; goto case 3: // case 3も実行 case 3: 文A; break; default: 文B; break; }
C#では、1つ以上のステートメントが書かれたcaseラベルから次のcaseラベルにフォールスルーすることは許されない。ただし、ステートメントのないcaseラベルにおいてはこの限りではない。
C#では、CやC++が整数型しか条件の値に使用できないのに対し、文字列型にもswitch文を適用することができる。
[編集] PHP
PHPでは、C#と同様、文字列にも、switch文が適用できる。
switch(str){ case "ABC": 文A; break; case "XYZ": 文B; break; case "123": 文C; break; default: 文D; break; }
[編集] 関連項目
[編集] 補足
VisualBasic6.0において switch文に相当するものは Select Case文であり、条件式には任意の数式または文字列式を入れることができ、柔軟である。
Perl では、perl-5.8 以降から use Switch として switch 〜 case 文が使えるようになった。それ以前のバージョンの perl に関しては、Perl付属文章 perlsyn ドキュメントの Basic BLOCKs and Switch Statements の節に書式の例が書かれている。