P5

switch 文

switch 文

switch 文とは、変数の値に応じて処理するブロックを切り替えることのできる命令です。機能的には if 文と似ています。Processing における switch 文の書き方を以下に示します。

int state = 1;

switch( state ){
  case 0:
    println( "message 1" ); // 実行されない
    break;
  case 1:
    println( "message 2" ); // この命令が実行される
    break;
  case 2:
    println( "message 3" ); // 実行されない
    break;
  case 3:
    println( "message 4" ); // 実行されない
    break;
  default:
    println( "message 5" ); // 実行されない
    break;
}

exit();

case 文を使って変数の値ごとに処理内容を並べます。この例ですと switch 文の条件変数として state という変数が使われており、この変数の値によってどの case 文の処理が実行されるかが切り替わります。state の値は 1 であるので、case 1 内の処理が実行されます。

どの case にも当てはまらない場合は、default 文以下の処理が実行されます。default 文は必ずしも書く必要はなく、省略可能です(ただ、条件変数が意図しない値をとる可能性に備えて、default文は常に書くようにする(そしてその中でエラーへの対処をする)のが推奨されます)。

各 case 文ごとに break 文を最後に書く必要があります。break 文を書かないと、処理がその場所で止まらずそれ以降の case 内の処理まで実行されてしまいます。例えば、

int state = 1;

switch( state ){
  case 0:
    println( "message 1" );
  case 1:
    println( "message 2" ); // 実行される
  case 2:
    println( "message 3" ); // 実行される
  case 3:
    println( "message 4" ); // 実行される
  default:
    println( "message 5" ); // 実行される
}

exit();

とすると、case 1 以降の全ての処理が実行されてしまいます。break 文を書くことで、break 文の位置までで処理を止めることができるわけです。もっとも、break 文を書かずあえて後続の処理も実行させるというテクニックもあります。しかし、通常は case ごとに必ず break 文を加えるのがバグ防止のために推奨されます。

switch 文で使える条件変数はint型とchar型だけ

switch 文に使える条件用の変数はint型とchar型だけです。float型やString型は使うことができません。すなわち、

int id = 501; // int型の条件変数

switch( id ){
  case 501:
    println( "501" );
    break;
  case 502:
    println( "502" );
    break;
}

exit();

char c = 'n'; // char型の条件変数

switch( c ){
  case 's':
    println( "sauce" );
    break;
  case 'n':
    println( "noodle" );
    break;
  case 'k':
    println( "kiwi" );
    break;
}

exit();

というのは可能ですが、以下のようなswitch文ではエラーになります。

String s = "Hello";

switch( s ){ // 条件変数にString型は使えない
  case "Hello":
    println( "en" );
    break;
  case "Konnichiwa":
    println( "jp" );
    break;
  case "Bonjour":
    println( "fr" );
    break;
}

exit();

もし String型の変数で条件分岐をさせたい場合は、if文を使いましょう。

String s = "Konnichiwa";

if( s == "Hello" ){
  println( "Hi" );
} else if( s == "Konnichiwa" ){
  println( "Doumo" );
} else if( s == "Bonjour" ){
  println( "Bonjour" );
}

exit();

コメント

Copied title and URL