嵌套if语句

时间:2011-08-05 14:28:38

标签: coding-style if-statement nested

哪个更好,将if语句嵌套在if块中,或嵌套在else块中?

一个。

if (cond1)
   if (cond2){
      statement1;
      statement2;
      ...
   }
   else {
      statement3;
      statement4;
      ...
   }

else {
   statement5;
   statement6;
   ...
}

if (!cond1) {
   statement5;
   statement6;
   ...
}

else if (cond2) {
   statement1;
   statement2;
   ...
}

else {
   statement3;
   statement4;
   ...
}

感谢目前为止的回复。我只是编辑了选项,但我的主要关注点恰恰是这样:如果你有一个选择,(通过改变条件表达式)最好将if语句嵌套在更高级别,如果是块或其它块? (a)只是在if块中嵌套if的一个例子,(b)是在else块中嵌套if的一个例子。再次感谢大家的时间。

3 个答案:

答案 0 :(得分:1)

实际上,您的示例不匹配。我会重写第一个:

if(cond && cond2)
{

}
else
{

}

如果你的第一个例子的陈述是:

,我唯一会嵌套
if(cond)
{
    if(cond2)
    {
        // Stuff that requires both conditions to be true.
    }

    // Stuff that requires only the first condition to be true.
}
else
{

}

答案 1 :(得分:1)

编辑:感谢您澄清问题。问题现在真的是风格之一,归结为最具可读性的问题。一般来说,当你有一个真正的多向条件时,后者更好,这意味着在代码中的某些点上,有三个可能的条件同样可能并且同样合理。前者更清晰,或许在语义上cond1是真正的驱动程序,而cond2是一种从属条件,人们只会在cond1为真时考虑。

OLD ANSWER:

这是对问题的一种解释(“嵌入其中”):

if (cond1) {
    if (cond2) {
        A
    }
} else {
    B
}

正如贾斯汀指出的那样,这应该写成

if (cond1 && cond2) {
    A
} else {
    B
}

除非代码需要位于if cond1 }

范围内 if cond2部分。 >

您的问题的另一种解释(“嵌套在其他内部”)是:

if (cond1) {
    A
} else {
    if (cond2) {
        B
    }
}

在这种情况下,您应该重写为

if (cond1) {
    A
} else if (cond2) {
    B
}

因为它更好地表达了多路条件的概念。再次,如果有某些东西属于非cond1但不属于cond2的范围,那么你需要嵌套。

希望有所帮助。

答案 2 :(得分:0)

编辑:在这种情况下,我认为两者都不一定更好。在我看来,(b)更容易阅读和遵循逻辑。任何一个人都会这样做!

(a)中的else是否与第一个if语句或第二个一起使用?顺便说一下,我会假设它与第一个if语句一致,但如果是这种情况,那么你的两个例子在逻辑上是不一样的。