LINEスタンプ制作代行サービス・LINEスタンプの作り方!

お電話でのお問い合わせ:03-6869-8600

stampfactory大百科事典

Switch文

switch文(スイッチぶん)とは、プログラミング言語において、ある式の値に応じて多分岐をおこなう文である。最適化の仕方によって多少変わることはあるが、場合によってはテーブルジャンプなどにより、条件判断を繰り返すif文より効率的に実行される。構文は以下の通り。上記の「case」はいくつでも記述することができる。この文は次のような手順で実行される。ここで注意しなければならないのが、caseはラベルに過ぎず、そのcaseより前からの実行から、そこでswitch文を抜けさせる働きはない点である(一般的には、次のcaseがあらわれる直前にbreak文を置く)。このルールはフォールスルー(fall through)と言い、制御の流れが合流する動作をさせたい場合に便利であるが、一方でbreak文の書き忘れによるバグ、ループを抜けるbreakと取り違える誤読によるバグなど、バグの温床として問題視されてきた。そのためlintでは、意図的にフォールスルーしていることを示すcodice_1などのコメントが記述されていない限り警告を出す。また、Cに類似した構文を採用した言語でも、C#のように対策(後述)した言語仕様にされていることがある。上記の例は、if文を羅列することで同様の動作を実現することができる。defaultは最後に記述される場合が多いが、必ずしも最後である必要はない。switchによる分岐は以下のようにdo-while文と組み合わせることも可能である。例えばDuff's deviceではそのような使われ方をしている。C#でのswitch文はC言語と似たような見た目であるが、フォールスルーについての挙動は異なる。C#では、caseラベルは文に付属する扱いとなるが、1つの文に複数のcaseラベルを付けることができる。また、C言語のようなフォールスルーは禁止されており、次のcaseラベル付きの文、あるいはswitchブロックの末端に、通常の制御フローで到達してはならない。すなわち、breakでswitchを抜ける、returnで関数ごと抜ける、例外を投げる、無限ループしてそれ以上進まない、goto caseするなどの書き方が必要となる。goto caseにより、C言語ではフォールスルーを使って書くことができた、制御の合流を書くことができる。C#では、CやC++が整数型しか制御式の値に使用できないのに対し、文字列型も使用できる。Goでは、caseに複数の値を指定できる。次のcaseの直前にfallthrough文を置くとフォールスルーになる。では、C#と同様、文字列にも、switch文が適用できる。構造化されたBASICでは、Select Caseステートメントが存在することが多い。このステートメントでは、文字列または整数を対象にできる。Cなどと違い、各Caseはラベルではなく、Selectステートメントはフォールスルーでない。Perlでは、perl-5.8以降からuse Switchとした上でswitch case文が使えるようになった。それ以前のバージョンのperlに関しては、Perl付属文章perlsynドキュメントのBasic BLOCKs and Switch Statementsの節に書式の例が書かれている。Rubyでは、case式により同様の多分岐ができる。フォールスルーはない。ラベルとして置いたものと条件値はcodice_2演算子で比較されるため、これをオーバーロードすることでクラスに応じた一致判定を行うことができる。Ruby自体のクラスライブラリ内でも、正規表現の一致判定、範囲オブジェクトでの範囲内かどうかの判定、オブジェクトがあるクラスに属するかの判定など、各種の定義がなされている。Mediawiki系のTemplateにおいては、を用いて多分岐をおこなうことができる。一対一の分岐処理の他、複数の値に対して同一の処理を定義する一種のフォールスルーも実現できる。しかし、CやC#といった言語でのreturn文やbreak文が無い。そのため処理の途中でSwitch文を抜けるにはif等の条件文で処理を囲み、実行させないよう制御する必要がある。詳細については、の項を参照の事。RubyやSQLでは、switchに相当する文の後の式が必須ではなく、省略した場合はwhenとして書かれた式のうち、最初に真となるところを実行するようになる。PHPやJavaScriptなど、caseの式が定数である必要性がない言語の場合、codice_3と書くことで同様の動作を実現できる。

出典:wikipedia

LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。