2016-07-24 6 views
-2

2層のスイッチケースのようにすることはできますか?最初のケースの中に2番目の式があるという2つの式があるとしますか?私はグーグルではありますが、私が探しているものは見つかりませんでした。1つのスイッチケースで複数のスイッチケースを使用できますか?

switch (Middle, Direction) { 
    case true: 
    case 'left': 
     code block 

     break; 
    case 'right': 
     code block 

     break; 
    break; 
    case false: 
    case 'left': 
     code block 

     break; 
    case 'right': 
     code block 

     break; 
    break; 

    default: 
    code block 
} 
+0

これをしたくない理由を調べるには、[この質問](http://stackoverflow.com/questions/15931089/alternative-to-nested-switch-statements-in-java)をご覧ください。 – csmckelvey

+0

新しい構文が存在することを望むだけではありませんが、最初の 'case true'が標準の' switch'動作に従って 'case 'left''に落ちるため、提案された新しい構文はうまくいかないでしょう。 – nnnnnn

答えて

0

caseに別のswitchを使用してください。

+0

それは私のコードを2倍長くして、もっと複雑に見えます。 – Funktiona

+0

2番目のレイヤーのifステートは、それぞれのケースでスイッチケースではなく、より短く、より見やすくなります。 – Funktiona

1

はい、あなたは、個々の、完全なswitch ESを使用する必要があります。Directionがない場合は、上記で、'left'または'right'しかしMiddleであることを

switch (Middle) { 
    case true: 
    switch (Direction) { 
     case 'left': 
     //code block 
     break; 
     case 'right': 
     //code block 
     break; 
    } 
    break; 
    case false: 
    switch (Direction) { 
     case 'left': 
     //code block 
     break; 
     case 'right': 
     //code block 
     break; 
    } 
    break; 
    default: 
    //code block 
} 

注意をtruefalse(これは、それは本当にだ場合ブーリアンでなければなりません)、従属スイッチにはデフォルトがないため、デフォルトコードは実行されません。

switch (Middle+'|'+Direction) { 
    case 'true|left': 
    //code block 
    break; 
    case 'true|right': 
    //code block 
    break; 
    case 'false|left': 
    //code block 
    break; 
    case 'false|right': 
    //code block 
    break; 
    default: 
    //code block 
} 

またはディスパッチオブジェクトを見て:

代わりに、あなたはそれが簡単に一致しない場合のデフォルトを使用することができた、MiddleDirectionを組み合わせかもしれません

var actions = { 
    "true|left": function() { 
    // code for Middle = true, Direction = left 
    }, 
    "true|right": function() { 
    // code for Middle = true, Direction = right 
    }, 
    "false|left": function() { 
    // code for Middle = false, Direction = left 
    }, 
    "false|right": function() { 
    // code for Middle = false, Direction = right 
    }, 
    "default": function() { 
    // code for the default 
    } 
}; 
(actions[Middle+"|"+Direction] || actions.default)(); 

を..この特定のケースでは、それはswitch以上のものをあなたに買わない。

+0

それぞれの場合にifステートメントを使用する代わりに、2番目の例を使用しますか? – Funktiona

+0

@Funktiona:私はやったが、まれにしか。上記のように5つの可能性があるのであれば、スイッチをまったく使用せず、 'if/else'だけで済むでしょう。 –

関連する問題