如何重构重复的控制结构



我有完全相同的重复控制结构,不同之处在于内部的事情是如何发生的。特别是,我不知道如何处理breakcontinuereturn。例如:

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依赖于ij,需要通过j循环breakcontinuereturn退出功能。我该如何考虑这一点以消除重复?

我曾想过编写一个以doSomethings为自变量的函数,但我不确定如何处理breaks、continues或returns。

[我对重复不满意,因为在f()g()和其他四个完全相同的函数中,对ij进行了一些检查;唯一的区别是几行代码。]

如果真的希望/坚持在循环上下文中与breakcontinuereturn具有相同的内部控制,那么所提出的解决方案是:-(.

另一方面,如果doSomethingFG12函数都有一个定义的接口,那么用breakcontinuereturn来补充您的通用控制结构以处理这种情况,从而从中选择返回值。

最新更新