Как мне провести рефакторинг дублирующих структур управления? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть дублированные структуры управления, которые абсолютно одинаковы, и разница в том, как все происходит внутри.В частности, я не знаю, что делать с break, continue и return.Например:

int f() {
  for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
      if (isFoo(i, j)) {
        // doSomethingF1
      } else {
        // doSomethingF2
      }
    }
  }
}

int g() {
  for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
      if (isFoo(i, j)) {
        // doSomethingG1
      } else {
        // doSomethingG2
      }
    }
  }
}

, где doSomething s полагается на i и j, и необходимо break или continue через цикл j и return изфункция.Как мне учесть это, чтобы избавиться от дублирования?

Я думал о написании функции, которая будет принимать doSomething s в качестве аргументов, но я не уверен, как поступить с breaks, continue s или return s.

[Я не в порядке с дублированием, поскольку есть некоторые проверки для i и j в f(), g() и, подобно четырем другим функциям, которые точно такие же;единственное отличие - несколько строк кода.]

1 Ответ

0 голосов
/ 22 ноября 2018

Если вы действительно хотите / настаиваете на том же внутреннем управлении в контексте цикла с break, continue и return, тогда предлагаемое решение - макросов : - (.

С другой стороны, если все функции doSomethingFG12 имеют определенный интерфейс, то дополните вашу общую структуру управления для обработки случая с помощью break, continue и returnчтобы сделать выбор оттуда возвращаемых значений.

...