WikipediaDisclaimersSearchswitch文LanguageWatchEditswitch文(スイッチぶん)とは、プログラミング言語において、ある式の値に応じて多分岐を行なう文である。最適化の仕方によって多少変わることはあるが、場合によってはテーブルジャンプなどにより、条件判断を繰り返すif文より効率的に実行される。文法EditC言語Edit構文は以下の通り。文}上記の「case」ラベルはいくつでも記述することができる。この文は次のような手順で実行される。制御式を評価し、整数値を得る。その整数値がどれかのcaseで指定された値であるなら、そのcaseに引き続く文に飛ぶ。どのcaseでも指定されていなければ、defaultに引き続く文に飛ぶ。defaultが記述されていなければ、何も実行せずにswitch文を抜ける。フォールスルーEditここで注意しなければならないのが、caseはラベルに過ぎず、そのcaseより前からの実行から、そこでswitch文を抜けさせる働きはない点である(一般的には、次のcaseがあらわれる直前にbreak文を置く)。言い、制御の流れが合流する動作をさせたい場合に便利であるが、一方でbreak文の書き忘れによるバグ、ループを抜けるbreakと取り違える誤読によるバグなど、バグの温床として問題視されてきた。*/などのコメントが記述されていない限り警告を出す。Cに類似した構文を採用した言語でも、C#のように対策(後述)した言語仕様にされていることがある。上記の例は、if文を羅列することで同様の動作を実現することができる。if文では比較対象の「値」が整定数式である必要がない点においてswitch文よりも柔軟である。文}defaultは最後に記述される場合が多いが、必ずしも最後である必要はない。switchによる分岐は以下のようにdo-while文と組み合わせることも可能である。deviceではそのような使われ方をしている。C#EditC#でのswitch文はC言語と似たような見た目であるが、フォールスルーについての挙動は異なる。ここのbreakも省略不可}C#では、caseラベルは文に付属する扱いとなるが、1つの文に複数のcaseラベルを付けることができる。C言語のようなフォールスルーは禁止されており、次のcaseラベル付きの文、あるいはswitchブロックの末端に、通常の制御フローで到達してはならない。caseするなどの書き方が必要となる[1]。caseにより、C言語ではフォールスルーを使って書くことができた、制御の合流を書くことができる。CやC++では、switch文の制御式には整数型の式、またcaseラベルには整定数式しか使用できないのに対し、C#ではそれぞれ文字列型および文字列リテラルも使用できる。整数型あるいは整数型に準ずる値型のnull許容型System.Nullableも使用することができる。7.0以降では型switchを使用できる。Console.WriteLine($"objは負の32bit整数{num}です。Console.WriteLine($"objはHから始まる文字列{str}です。Console.WriteLine($"objは文字列{str}です。Console.WriteLine("objは想定外の型あるいは値です。break;}GoEditGoでは、caseに複数の値を指定できる。次のcaseの直前にfallthrough文を置くとフォールスルーになる。PHPEditPHPでは、C#と同様、文字列にも、switch文が適用できる。break;}BASICEditこの節の加筆が望まれています。Caseステートメントが存在することが多い。このステートメントでは、文字列または整数を対象にできる。SelectCなどと違い、各Caseはラベルではなく、Selectステートメントはフォールスルーでない。case文が使えるようになった。Statementsの節に書式の例が書かれている。RubyEditRubyでは、case式により同様の多分岐ができる。フォールスルーはない。2]ため、これをオーバーロードすることでクラスに応じた一致判定を行うことができる。Ruby自体のクラスライブラリ内でも、正規表現の一致判定[3]、範囲オブジェクトでの範囲内かどうかの判定、オブジェクトがあるクラスに属するかの判定など、各種の定義がなされている。MediawikiEditMediawiki系のTemplateにおいては、ParserFunctionsを用いて多分岐をおこなうことができる。一対一の分岐処理の他、複数の値に対して同一の処理を定義する一種のフォールスルーも実現できる。CやC#といった言語でのreturn文やbreak文が無い。そのため処理の途中でSwitch文を抜けるにはif等の条件文で処理を囲み、実行させないよう制御する必要がある。詳細については、Help:条件文#switchの項を参照の事。Calcの場合EditCHOOSE関数の拡張としてSWITCH関数が利用できる。検索する値を指定します。数値または文字列が指定できる。検索される値を指定する。数値または文字列が指定できる。結果[検索値]が[値]に一致したときに返したい値を指定する。[値]と[結果]の組み合わせは126個まで指定できる。既定の結果[検索値]が[値]のどれにも一致しなかったときに返したい値を指定する。この引数は省略することもできる。3]では、switchに相当する文の後の式が必須ではなく、省略した場合はwhenとして書かれた式のうち、最初に真となるところを実行するようになる。PHPやJavaScriptなど、caseの式が定数である必要性がない言語の場合、switch(true)と書くことで同様の動作を実現できる。C#コンパイラが停止性問題を解くことはできないため、この扱いはループ条件が定数の場合に限られる。Rubyの===演算子は、JavaScriptやPHPでのような「厳密に等しい」という意味ではない。どちらの言語も、switch...caseではなく、case...whenと書く。switch(C#リファレンス)、MSDN(2014年5月30日閲覧)。制御構造、2014年3月3日閲覧。Regexp、2014年3月3日閲覧。制御構造この項目は、コンピュータに関連した書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めています(PJ:コンピュータ/P:コンピュータ)。noted.PrivacyDesktop。