我想知道如果条件有任何替代或优雅的写作方式,如果有
是需要检查的更多条件。
实施例,
if(cond1){
if(cond2){
if(cond3){
if(cond4){
//all conditions are checked
flag = true;
}
}
}
}
答案 0 :(得分:9)
是的,您可以使用逻辑AND运算符。
if(cond1 && cond2 && cond3 && cond4) {
flag = true;
}
这相当于如果cond1
为假,则不评估其余条件,依此类推。
在这种情况下,直接分配价值可能更简单(灵感来自帕特里克的原始答案):
flag = cond1 && cond2 && cond3 && cond4;
答案 1 :(得分:3)
一种简短易读,优雅的方式是:
flag = cond1 && cond2 && cond3 && cond4 ? true : false;
或者正如pstanton所说:
boolean flag = cond1 && cond2 && cond3 && cond4;
答案 2 :(得分:2)
如果越少越好,这就是最优雅的:
boolean flag = cond1 && cond2 && cond3 && cond4;
答案 3 :(得分:1)
正如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