3

我有一个方法想要重构,一些虚拟代码如下:

if(deletedInfo.isEmpty() && addedInfo.isEmpty()) {
    // some logic codes
} else if (!deletedInfo.isEmpty() && addedInfo.isEmpty()) {
    // some logic codes
} else if (deletedInfo.isEmpty() && !addedInfo.isEmpty()) {
    // some logic codes
} else if(!deletedInfo.isEmpty() && !addedInfo.isEmpty()) {
    // some logic codes
}

是否有适当的模式或某种算法来重构这些代码?

谢谢。

4

3 回答 3

4
if (deletedInfo.isEmpty()) {

    if (addedInfo.isEmpty()) {
        // some logic codes
    } else {
        // some logic codes
    }

} else {

    if (addedInfo.isEmpty()) {
        // some logic codes
    } else {
        // some logic codes
    }

}
于 2012-05-03T09:45:50.777 回答
2

您可以使用以下代码进行重构:

int val = 0;
if (deletedInfo.isEmpty()) val |= 0x1;
if (addedInfo.isEmpty()) val |= 0x2;

switch (val) {
    case 0: // some logic codes
    case 1: // some logic codes
    case 2: // some logic codes
    case 3: // some logic codes
}
于 2012-05-03T09:52:44.917 回答
0

有几种方法可以做到这一点。这是一个:

if (a) {
  if (b) {
    // do J
  } else {
    // do K
  }
} else {
  if (b) {
    // do L
  } else {
    // do M
  }
}

您可能更喜欢类似于真值表的东西,特别是如果您要组合两个以上的测试:

int switcher = 0;
if (a) switcher|=1;
if (b) switcher|=2;
switch(switcher) {
  case 0:
    // do J
    break;
  case 1:
    // do K
    break;
  case 2:
    // do L
    break;
  case 3:
    // do M
    break;
}

我不认为有一种自动“正确”的方式——你必须选择最适合你情况的方式。

于 2012-05-03T09:48:23.823 回答