我想知道如果有条件,是否有任何替代或优雅的写作方式,如果有
有更多的条件需要检查。
例子,
if(cond1){
if(cond2){
if(cond3){
if(cond4){
//all conditions are checked
flag = true;
}
}
}
}
我想知道如果有条件,是否有任何替代或优雅的写作方式,如果有
有更多的条件需要检查。
例子,
if(cond1){
if(cond2){
if(cond3){
if(cond4){
//all conditions are checked
flag = true;
}
}
}
}
是的,您可以使用逻辑 AND 运算符。
if(cond1 && cond2 && cond3 && cond4) {
flag = true;
}
它的等效性在于如果cond1
为假,则不评估其余条件,依此类推。
在这种情况下,直接分配值可能更简单(受 Patrick 的原始答案启发):
flag = cond1 && cond2 && cond3 && cond4;
一个简短易读、优雅的方式是:
flag = cond1 && cond2 && cond3 && cond4 ? true : false;
或者正如 pstanton 所说:
boolean flag = cond1 && cond2 && cond3 && cond4;
如果少即是多,这是最优雅的:
boolean flag = cond1 && cond2 && cond3 && cond4;
正如 ZongLi 所指出的,将其简化为一组 AND 很容易,但是当您有复杂的逻辑时,这会变得更加复杂
if(cond1){
if(cond2){
if(cond3){
if(cond4){
//all conditions are checked
flag = true;
}
}
if(cond4){
flag3 = true;
}
}
else
flag2 = true;
}
现在你遇到了一种情况,减少这种情况并不那么简单
flag1 = cond1 && cond2 && cond3 && cond4
flag2 = cond1 && cond2 && cond4
flag2 = cond1 && !cond2
但是,将这些简化为布尔表达式通常会使事情的可读性和可维护性降低,因为它失去了变量之间的语义关系。上面的例子可以改写为
if(cond1){
if(cond2){
if(cond4){
flag3 = true;
if(cond3){
flag = true;
}
}
}
else
flag2 = true;
}
或者
if(cond1 && cond2){
if(cond4){
flag3 = true;
if(cond3){
flag = true;
}
}
}
else if(cond1){ flag2 = true; }
这将取决于最好的代码语义,但是,大量嵌套表明您最好使用布尔表达式或重组条件树。
在这里记住布尔逻辑等价是很有用的,尤其是IF x THEN y
在逻辑上等价于!X or Y