2

如果我想测试enumusing 一个 case 语句的多个值,并且 80%​​ 的 case 语句需要两次不同的if检查,那么一遍又一遍地重用该代码是否被认为是糟糕的编码?

我实际上使用ctrl+c并且ctrl+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 回答