switch
if文と同様に、switch文は、さまざまな場合に実行される異なるコードを指定できるようにすることで、
プログラムフローを制御します。
一般的な構文は次のようになります。
code:switch_sample1.ino
switch (var) {
case val1:
// statements
break;
case val2:
// statements
break;
...
default:
// statements
}
ここで、varは調査対象の変数で、var1、val2はそれぞれの場合の後にvarが持つ定数値です。
説明
switchステートメントは、変数の値をcaseステートメントで指定された値と比較します。
変数の値と値が一致するcaseステートメントが見つかると、そのcaseステートメントのコードが実行されます。
より具体的な例を次に示します。
code:switch_sample2.ino
switch (var) {
case 1:
doThing1();
break;
case 2:
doThing2();
break;
}
afterTheSwitch();
上の例では、var == 1の場合、case 1の後の行から始まるコードが実行されます。
つまり、varが1の場合、doThing1()が最初に呼び出され、その後breakステートメントが実行されます。
breakキーワードはswitchステートメントを終了し、通常は各case式の終わりに使用されます。
case 1の終わりにブレークがあるので、switch文は終了し、実行される次の行はtheSheitch()を呼び出す行です。
ブレークがない場合、switchステートメントはbreak(またはswitchステートメントの終わり)に達するまで、
次のcase式の実行を継続します( "fall-through")。 次のswitchを見てみましょう:
code:switch_sample3.ino
switch (var) {
case 1:
doThing1();
// no break statement anymore
case 2:
doThing2();
break;
}
afterTheSwitch();
さて、varが1の場合、doThing1()は前と同じように実行されます。
しかし、途切れることなく、コードは行ごとに実行され続けますので、doThing2()は次に呼び出されます。
この時点で、breakに達したので、プログラムはafterTheSwitch()を呼び出すことによって継続します。
これは通常、あなたが望むものではありません。なぜなら、それぞれのcase文は通常、最後に中断しているからです。
case文の代わりに "default:‘"を書くことで、case文のどれも一致しない場合の処理を指定することができます。
defaultを持つことはオプションです(省略することもできます)。
ただし、デフォルトの場合は、すべてのcase文の後に指定する必要があります。
議論してきたswitch文にdefaultを追加しましょう:
code:switch_sample4.ino
switch (var) {
case 1:
doThing1();
break;
case 2:
doThing2();
break;
default:
doSomethingElse();
}
afterTheSwitch();
varが1の場合、doThing1()が呼び出されます。 varが2の場合、doThing2()が呼び出されます。
varが他にあれば、doSomethingElse()が呼び出されます。 上記のように、defaultはオプションです。
1つが欠落し、case文のどれも一致しない場合、switch文はまるでそれが存在しないかのように何もしません。
switch文は、比較する変数としてenum値とともに使用されることがよくあります。 この場合、列挙型がcase文として取るすべての値を書き留めることができ、すべての可能性をカバーしていることを確認してください。
関連項目
このドキュメントはleafLabs, LLC.が執筆し、たま吉が翻訳・一部加筆修正したものです。