重构多个嵌套if with same else
Refactor several nested if with same else
这与现有代码无关,但我正在寻找某些嵌套 if
在其 else
语句中执行相同操作时可能存在的模式。
if(condition1(a)) {
doSomethingWith1(a);
if(condition2(a)) {
doSomethingWith2(a);
} else {
elseFn();
}
} else {
elseFn();
}
doSomethingWith...
函数正在更改 a
的值,使得将所有条件集中在一个 if
中变得复杂。
所以我只是想知道是否有更清晰的方式来编写它(如果可能,用 C 语言)。
谢谢大家
在您的情况下,看起来第一个 if if(condition1(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();
}
我发现仔细检查第一个条件虽然效率较低,但可读性更高。这种重构消除了嵌套,没有多重功能。它还通过将每个逻辑路径分组到单个代码块中,更清楚地显示了三个不同的执行路径。
if (condition1(a) && condition2(a)) {
doSomethingWith1(a);
doSomethingWith2(a);
}
else if (condition1(a)) {
doSomethingWith1(a);
elseFn();
}
else {
elseFn();
}
这与现有代码无关,但我正在寻找某些嵌套 if
在其 else
语句中执行相同操作时可能存在的模式。
if(condition1(a)) {
doSomethingWith1(a);
if(condition2(a)) {
doSomethingWith2(a);
} else {
elseFn();
}
} else {
elseFn();
}
doSomethingWith...
函数正在更改 a
的值,使得将所有条件集中在一个 if
中变得复杂。
所以我只是想知道是否有更清晰的方式来编写它(如果可能,用 C 语言)。
谢谢大家
在您的情况下,看起来第一个 if if(condition1(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();
}
我发现仔细检查第一个条件虽然效率较低,但可读性更高。这种重构消除了嵌套,没有多重功能。它还通过将每个逻辑路径分组到单个代码块中,更清楚地显示了三个不同的执行路径。
if (condition1(a) && condition2(a)) {
doSomethingWith1(a);
doSomethingWith2(a);
}
else if (condition1(a)) {
doSomethingWith1(a);
elseFn();
}
else {
elseFn();
}