2

私が書いたいくつかのコードをリファクタリングしていて、switch ステートメントを while ループに入れるか、while ループを各ケース ブロックに繰り返すかを決定する必要があります。2 つの異なる方法は、次の疑似コードのようなものです。

オプション1)

while (cnt > 0) {
    switch (value) {
    case A:
        doSomething();
        break;
    case B:
        doSomethingElse();
        break;
    ...
    default:
        default();
        break;
    }
    cnt--;
}

オプション 2)

switch (value) {
case A:
     while( cnt > 0){
        doSomething();
        cnt--;
      }
case B:
     while( cnt > 0){
        doSomethingElse();
        cnt--;
      }
...
default: 
     while( cnt > 0){
        default();
        cnt--;
      }
}

最初のオプションは DRY の原則により適していると思います。これは、while と cnt-- を毎回繰り返さないためです。switch ステートメントでケースを選択すると、while でループを開始し、switch 条件を評価する必要がなくなるため、2 番目のオプションの方が少し良いと思います。

では、これら 2 つのソリューションのどちらを選択しますか? また、その理由は何ですか?

注: switch-condition (つまり、以下のコードの変数「値」) は while ループ全体で変化しないと想定できます。つまり、操作 doSomething()、doSomethingElse() などは影響しません。スイッチステートメント。

NB2: 私が取り組んでいる実際のコードでは、while ループが非常に大きくなる可能性があります。一部のテスト ケースでは、「Cnt」は 10^9 のオーダーになる場合があります。

4

3 に答える 3

4

cntが呼び出される回数を制御するためだけに使用される場合はdoSomething()、それをメソッドに渡し、メソッド内でループすることを検討する必要があります。通常はパフォーマンスについて心配する必要はありませんが、実際に 10^9 回の反復について話している場合は、切り替えを繰り返さないようにする必要があります。

于 2013-04-07T20:50:03.087 に答える
4

ほとんどの場合、ループスイッチシーケンスは、明確にするために避けるべきアンチパターンでありcnt、パフォーマンスのためにも非常に大きくなる可能性があると述べています。

于 2013-04-07T09:45:02.690 に答える
2

オプション 2 は、 - ステートメントに重点を置いており、繰り返しごとswitchに作業する必要があるため、より簡単です。case

于 2013-04-07T09:16:35.643 に答える