Java 条件允许时的替代书写方式
我想知道如果条件允许,有没有其他的或者优雅的写作方式 还有更多的情况需要检查 例如Java 条件允许时的替代书写方式,java,coding-style,Java,Coding Style,我想知道如果条件允许,有没有其他的或者优雅的写作方式 还有更多的情况需要检查 例如 if(cond1){ if(cond2){ if(cond3){ if(cond4){ //all conditions are checked flag = true; } } } } 是的,您可以使用逻辑AND运算符 if(cond1 && cond2 &&
if(cond1){
if(cond2){
if(cond3){
if(cond4){
//all conditions are checked
flag = true;
}
}
}
}
是的,您可以使用逻辑AND运算符
if(cond1 && cond2 && cond3 && cond4) {
flag = true;
}
如果cond1
为false,则不计算其余条件,依此类推
在这种情况下,直接赋值可能更简单(受Patrick原始答案的启发):
一种简短易读、优雅的方式是:
flag = cond1 && cond2 && cond3 && cond4 ? true : false;
或者正如普斯坦顿所说:
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;
}
或
这将取决于代码的语义,这是最好的,但大量嵌套表明,最好使用布尔表达式或重构条件树
在这里记住布尔逻辑等价是很有用的,特别是
如果x那么y
在逻辑上等价于!X或Y
您甚至可以删除括号。您甚至可以删除“?”?真:假;'我只想补充一点,那就是短路评估false&&anything
短路评估为false
,而不评估anything
true | |任何
短路评估为true
。此外,只有布尔运算符(&&
|
)使用此求值。二进制&
或
没有使用它。@Pshemo布尔和|也没有。你的术语有点混乱。计算短路与否的是运算符本身:它与布尔值或二进制值无关。@EJP您是对的。我忘了当&
和|
用于布尔变量时,它们就不是二进制运算符。很难在凌晨4点集中注意力并写出好的评论:/
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; }