0

私はJavascript: the Definitive Referenceを読んでおり、93ページに次のように書かれています:

まれに、1 つのケース ラベルから次のケース ラベルにフォールスルーするこのようなコードを書くと便利ですが、99% の場合、switch 内のすべてのケースを break ステートメントで終了するように十分に注意する必要があります。

どのような状況で、switch ステートメントを複数の case ステートメントにフォールスルーさせますか?

4

4 に答える 4

3

便利なケースの 1 つは、複数の値が同じ結果になる場合です。

switch (value) {
  case 1:
  case 2:
    action1();
    break;
  case 3:
  case 4:
  case 5:
    action2();
    break;
}

空のケースは次のケースに落ちます。この場合、混乱のリスクは最小限です。

本の著者が心配しているケースは、アクションを組み合わせる場合です。たとえば、値にとの2両方が必要な場合です。action2action3

switch (value) {
  case 1:
    action1();
    break;
  case 2:
    action2();
    // continue with action3
  case 3:
    action3();
    break;
}

a を忘れるのbreakはよくある間違いなので、上記のようなコメントを追加して、意図的に省略したことを明確にする必要があります。

比較のために; breakC#では、 a のa を単に省略することはできません。代わりにswitcha を使用してgoto、実行を続行するケースを指定する必要があります。

于 2012-06-30T22:38:42.810 に答える
1

私がこれまでに行ったことがあるのは、ユーザー入力が大文字で優先され、小文字で受け入れられる場合だけです。

switch(input){
    case 'a':
        print "Please use uppercase next time";
    case 'A':
        //do stuff here
        break;
}
于 2012-06-30T22:37:25.767 に答える
0

すべて同じコードを取得する必要がある複数のケースがある場合は、確かに受け入れられます。

switch(val) {
    case "aa":
    case "bb":
        // do you thing here
        break;
}
于 2012-06-30T22:39:35.380 に答える
0

この本は、この種の推奨事項を発行するのではなく、事実に固執する必要があると思います。前のブロックにステートメントcaseがない場合、次のブロックが実行されることに注意してください。breakこれは便利ですが、混乱を招く可能性もあります (つまり、breakステートメントが欠落しているとバグが発生します)。いつ使用するかは主観的ですが、基本的には条件がor式のような場合に使用できます。

if(myvar == x || myvar == y) {
    // do A
} else if (myvar == w || myvar == z) {
    // do B
} else {
    // do C
} 

次のように書き換えることができます。

switch(myvar) {
    case x:
    case y:
        // do A
        break;
    case w:
    case z:
        // do B
        break;
    default:
        // do C
        break;
}

}

于 2012-06-30T22:43:32.043 に答える