2

我想知道如果有条件,是否有任何替代或优雅的写作方式,如果有

有更多的条件需要检查。

例子,

if(cond1){
   if(cond2){
      if(cond3){
         if(cond4){
            //all conditions are checked
             flag = true;
         }
      }
   }
}
4

4 回答 4

9

是的,您可以使用逻辑 AND 运算符。

if(cond1 && cond2 && cond3 && cond4) {
    flag = true;
}

它的等效性在于如果cond1为假,则不评估其余条件,依此类推。

在这种情况下,直接分配值可能更简单(受 Patrick 的原始答案启发):

flag = cond1 && cond2 && cond3 && cond4;
于 2012-07-23T01:04:41.713 回答
3

一个简短易读、优雅的方式是:

 flag = cond1 && cond2 && cond3 && cond4 ? true : false;

或者正如 pstanton 所说:

 boolean flag = cond1 && cond2 && cond3 && cond4;
于 2012-07-23T01:08:34.197 回答
2

如果少即是多,这是最优雅的:

boolean flag = cond1 && cond2 && cond3 && cond4;
于 2012-07-23T01:10:33.393 回答
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

于 2012-07-23T01:14:23.137 回答