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が false の場合、残りの条件は評価されないなどの点で同等です。

この場合、値を直接割り当てるだけでさらに簡単になる場合があります(パトリックの元の回答に触発されました):

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 に答える