If statement 使用相同的else重构多个嵌套if
这不是关于一段现有的代码,而是我在寻找一些可能存在的模式,如果一些嵌套的If statement 使用相同的else重构多个嵌套if,if-statement,design-patterns,refactoring,If Statement,Design Patterns,Refactoring,这不是关于一段现有的代码,而是我在寻找一些可能存在的模式,如果一些嵌套的if在其else语句中执行相同的操作 if(condition1(a)) { doSomethingWith1(a); if(condition2(a)) { doSomethingWith2(a); } else { elseFn(); } } else { elseFn(); } doSomethingWith
if
在其else
语句中执行相同的操作
if(condition1(a)) {
doSomethingWith1(a);
if(condition2(a)) {
doSomethingWith2(a);
} else {
elseFn();
}
} else {
elseFn();
}
doSomethingWith…
函数正在更改a
的值,使得将所有条件都包含在一个中变得复杂
所以我只是想知道是否有更清晰的方法来编写它(如果可能的话,用C)
感谢各位在您的情况下,看起来第一个if,if(条件1(a))
在调用doSomethingWith1(a)之前绝对有必要测试a
的值代码>以避免异常。所以,不,没有其他方法可以做到这一点
if(condition1(a)) {
doSomethingWith1(a);
if(condition2(a)) {
doSomethingWith2(a);
} else {
elseFn();
}
} else {
elseFn();
}
我不知道用C语言,但用Java,你可以这样写:
void function(int a) {
boolean b1 = condition1(a);
if (b1) {
doSomethingWith1(a);
boolean b2 = condition2(a);
if (b2) {
doSomethingWith2(a);
}
}
if (b1 || b2) {
return;
}
elseFn();
}
您只需对“doSomethings”进行计数并调用elseFn,除非所有操作都已执行
int count = 0;
if (condition1(a)) {
doSomethingWith1(a);
count++;
if (condition2(a)) {
doSomethingWith2(a);
count++;
if (condition2(a)) {
doSomethingWith2(a);
count++;
}
}
}
if (count < 3) {
elseFn();
}
int count=0;
如果(条件1(a)){
剂量1(a);
计数++;
如果(条件2(a)){
2(a)的剂量;
计数++;
如果(条件2(a)){
2(a)的剂量;
计数++;
}
}
}
如果(计数<3){
elseFn();
}
我发现重新检查第一个条件更易读,但效率更低。这种重构消除了嵌套,没有多个函数。它还通过将每个逻辑路径分组到单个代码块中,更清楚地显示了三种不同的执行路径
if (condition1(a) && condition2(a)) {
doSomethingWith1(a);
doSomethingWith2(a);
}
else if (condition1(a)) {
doSomethingWith1(a);
elseFn();
}
else {
elseFn();
}
doSomethingWith2(a)
必须在condition1(a)
为真时执行。elseFn()
必须在b1
为真且b2
为假时执行。当然还有另一种方法!布尔逻辑总是有替代方案的。有关广泛的示例,请参见;有关具体示例,请参见此问题的其他答案。还有,为什么要将问题代码复制到答案中?