Switch文

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

switch文(スイッチぶん)とは、プログラミング言語において条件の値に対応する文を実行するための条件文の一種である。

目次

文法

Cおよびそれに類する言語の場合

基本的な構文は以下の通りになる。

switch (条件式) {
   case 値 : 文
 
   ………
 
   default : 文
}

上記の「case」はいくつでも記述することができる。

この条件文は次のような手順で実行される。

  1. 条件の値を評価する。
  2. もし、条件式の値がcaseで指定された値であるなら、その文を実行する。
  3. 条件式の値がcaseで指定されていなければ、defaultで指定されている文を実行する。
  4. もし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;
}

BASIC

この節は執筆の途中です この節は執筆中です。加筆、訂正して下さる協力者を求めています。

構造化されたBASICでは、Select Caseステートメントが存在することが多い。このステートメントでは、文字列または整数を対象にできる。

Select Case str
    Case "ABC"
        文A
    Case "XYZ"
        文B
    Case "123"
        文C
    Case Else
        文D
End Select

Cなどと違い、各Caseはラベルではなく、Selectステートメントはフォールスルーでない。

Perl

Perlでは、perl-5.8以降からuse Switchとした上でswitch case文が使えるようになった。それ以前のバージョンのperlに関しては、Perl付属文章perlsynドキュメントのBasic BLOCKs and Switch Statementsの節に書式の例が書かれている。

関連項目

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net