2

ケース ステートメントを使用して複数の値をテストしたいenum場合、case ステートメントの 80% で 2 つの異なるifチェックが必要な場合、そのコードを何度も再利用するのは不適切なコーディングと見なされますか?

私は実際に使用ctrl+cctrl+v、コードの神々が私を殺すだろうと感じました。

ここにいくつかの視点があります:

switch(value) {

   case value1:
   {
      if(something) { //do something; }

      if(somethingElse) { // do something else; }

      //unique for value1
   }
   break;

   case value2:
   {
      //unique for value2
   }
   break;

   case value3:
   {
      if(something) { //do something; }

      if(somethingElse) { // do something else; }

      //unique for value3
   }
   break;

   case value4:
   {
      if(something) { //do something; }

      if(somethingElse) { // do something else; }

      //unique for value4
   }
   break;

   case value5:
   {
      //unique for value5
   }
   break;

   default:
   break;

Myvalueは からランダムに生成されenum、ランダムな回数呼び出されます。目標は、valueランダムな「値」になり、他のケースから完全に独立することです。

4

3 に答える 3

4

この重複したコードをメソッドに入れたいと思うかもしれません。

public void yourFunctionCall() {
    //Could even pass the value if needed
    if(something) { //do something; }

    if(somethingElse) { // do something else; }
}

次に、あなたのケースでこのメソッドを呼び出します:

switch(value) {

case value1: {
    yourFunctionCall();
    //or yourFunctionCall(value1);
    //unique for value1
} //etc..
于 2013-08-08T13:40:15.510 に答える
2

これが再利用可能なコードである場合は、メソッドに変換することをお勧めします。そうでない場合は、次のようswitch caseにフォールスルーを使用して共通コードをカバーする別のコードを追加するだけです。

switch (value) {

   case value1:

   case value3: // using fall-through

   case value4:
   {
      if (something) { /* do something; */ }

      if (somethingElse) { /* do something else; */ }
   }
}

switch (value) {

   case value1:
   {
      // unique for value1
      break;
   }

   case value2:
   {
      // unique for value2
      break;
   }

   // other unique cases
}
于 2013-08-08T13:46:27.523 に答える
2

関数を使用する方がおそらく優れていますが、別の方法を次に示します。

case value1:
case value3:
case value4:
  if(something) { /* do something */ }

  if(somethingElse) { /* do something else */ }

  if (value1)
  {
    //unique for value1
  }
  else if (value3)
  {
    //unique for value3
  }
  else // if (value4)
  {
    //unique for value4
  }
  break;

case value2:
  ...

またはネストされたスイッチを使用:

case value1:
case value3:
case value4:
  if(something) { /* do something */ }

  if(somethingElse) { /* do something else */ }

  switch(value)
  {
    case value1: /* unique for value1 */ break;
    case value3: /* unique for value3 */ break;
    case value4: /* unique for value4 */ break;
  }
  break;

case value2:
  ...

注意して使用してください。製品コードにはどちらもお勧めしません。

于 2013-08-08T13:47:11.017 に答える