这不是关于现有的一段代码,但我正在寻找一些嵌套if
在else
语句中执行相同操作的情况下可能存在的模式。
if(condition1(a)) {
doSomethingWith1(a);
if(condition2(a)) {
doSomethingWith2(a);
} else {
elseFn();
}
} else {
elseFn();
}
doSomethingWith...
函数正在更改a
的值,使得在if
中包含所有条件变得复杂。
所以我只是想知道是否有更清晰的方式来编写它(如果可能的话,用C语言)。
谢谢你们
答案 0 :(得分:0)
在您的情况下,在调用if(condition1(a))
以避免异常之前,看起来像第一个if a
是绝对必要的,以测试doSomethingWith1(a);
的值。所以,不,没有其他办法可以做到。
if(condition1(a)) {
doSomethingWith1(a);
if(condition2(a)) {
doSomethingWith2(a);
} else {
elseFn();
}
} else {
elseFn();
}
答案 1 :(得分:0)
你可以只计算" 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();
}
答案 2 :(得分:0)
我发现重复检查第一个条件更具可读性,但效率更低。这种重构消除了嵌套,没有多个功能。通过将每个逻辑路径分组为单个代码块,它还可以更清楚地显示三种不同的执行路径。
if (condition1(a) && condition2(a)) {
doSomethingWith1(a);
doSomethingWith2(a);
}
else if (condition1(a)) {
doSomethingWith1(a);
elseFn();
}
else {
elseFn();
}
答案 3 :(得分:-1)
我不知道在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();
}