0

同じ switch ステートメントを何度も使用していますが、それぞれの場合の機能は異なります。

switch(type){
  case "t1": 
    fnA();
    break;  
  case "t2": 
    fnB();
    break;
  ...
}

switch(type){
  case "t1": 
    fnZ();
    break;  
  case "t2": 
    fnY();
    break;
  ...
}

これを行うためのより良い、またはより賢い方法があるかどうかはわかりません。何も思いつかなかったので、皆さんに投げてあげようと思いました。前もって感謝します。

編集:より理解するには、次のように考えてください。最初のスイッチでは、タイプに応じて、データが特定の方法でオブジェクトに追加されます。2 番目のスイッチでは、データは特定の方法でオブジェクトから削除されます。

4

4 に答える 4

3

これは、オブジェクト指向プログラミングを使用するのに適した状況のように思えます。

  1. タイプごとにクラスを作成する
  2. タイプに応じて異なることを行う必要があるときはいつでも、type.someFunction()を呼び出します。各型クラスにこの関数を異なる方法で実装させます。
于 2013-02-14T18:56:19.427 に答える
1

これは暗闇の中のショットかもしれませんが、コード内で switch-case を複数回繰り返すのは、アーキテクチャの決定が間違っているためだと思います。

責任の割り当てが間違っている可能性があります。

ObjectOriented のものではなくモジュールを使用すると仮定すると、呼び出されるメソッドは mixin である必要があります。または、デコレータ パターンを使用します。

于 2013-02-14T19:00:21.367 に答える
0

通常、switch ステートメントは処理のボトルネックにはならないため、最適化は最後に行います。

それぞれのケースはテストとジャンプとして CPU に変換されるため、最悪のケースがいくつになるかを考えて、大騒ぎする価値があるかどうか、および実際に節約できるオペレーションの数 (最悪のケースと平均の両方) を決定します。

そうは言っても、明らかなオプションがいくつかあります。数値型があり、それらが均等に分散されている場合は、switch ステートメントを複数のスイッチに分割できます....

switch(type){
  case "t1": 
    fnA();
    break;  
  case "t2": 
    fnB();
    break;
  ...
}

switch(type){
  case "t1": 
    fnZ();
    break;  
  case "t2": 
    fnY();
    break;
  ...
}

もちろん、これは維持するのがよりトリッキーであり、コードを醜くする定数値の知識に依存する可能性があります。それは本当にただの汚い検索ツリーです...

もう 1 つの方法は、すべてのケースを関数に入れ、各値を関数ハンドラーにマップするツリーまたはハッシュ テーブルを構築することです。そうすれば、常に検索時間に頼ることができますO(logN)(または、ハッシュ テーブルの場合はより良い方法です)。繰り返しますが、よほどの理由がない限り、これを行わないでください。

それがあなたにいくつかの洞察を与えるのに役立つことを願っています.

于 2013-02-14T18:50:06.037 に答える
0

私はこのソリューションを実装するのをためらっています.aよりも簡潔ではなく、switch混乱を招くからです.

function doSwitch(expression, options) {
    options[expression]();
}

doSwitch(type, {
    "t1": fnA,
    "t2": fnB
});

doSwitch(type, {
    "t1": fnZ,
    "t2": fnY
});

パフォーマンスのためにこれを行わないでください。大量のswitch ステートメントが繰り返されるため、これを行ってください。そのような声明がある場合は、それを再評価することをお勧めします。

于 2013-02-14T18:51:59.393 に答える