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

いくつかの方法があります。ここに1つあります:

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

組み合わせるテストが 3 つ以上ある場合は特に、真理値表に近いものを好むかもしれません。

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 に答える