Coding style 嵌套if语句

Coding style 嵌套if语句,coding-style,if-statement,nested,Coding Style,If Statement,Nested,将if语句嵌套在if块内,还是嵌套在else块内,哪个更好 a b 谢谢你到目前为止的回复。我刚刚编辑了选项,但我主要关心的是:如果有选择,(通过更改条件表达式),将If语句嵌套在更高级别的If's If块还是else块中更好?(a) 只是将if嵌套在if块中的示例,(b)是将if嵌套在else块中的示例。再次感谢大家的时间。事实上,你们的例子并不匹配。我会重写第一个: if(cond && cond2) { } else { } 如果像您的第一个示例那样的语句是: if(

将if语句嵌套在if块内,还是嵌套在else块内,哪个更好

a

b


谢谢你到目前为止的回复。我刚刚编辑了选项,但我主要关心的是:如果有选择,(通过更改条件表达式),将If语句嵌套在更高级别的If's If块还是else块中更好?(a) 只是将if嵌套在if块中的示例,(b)是将if嵌套在else块中的示例。再次感谢大家的时间。

事实上,你们的例子并不匹配。我会重写第一个:

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
{

}

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

旧答案:

以下是对这个问题的一种解释(“嵌套在其中”):

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

if (cond1 && cond2) {
    A
} else {
    B
}
除非在
if cond1
部分中有需要的代码,而在
if cond2
范围内没有

对您的问题(“嵌套在else中”)的另一种解释是:

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

if (cond1) {
    A
} else if (cond2) {
    B
}
因为它更好地表达了多路条件的概念。同样,如果有不属于cond1范围但不属于cond2范围的内容,则需要嵌套


希望这能有所帮助。

编辑:在这种情况下,我认为两者都不一定更好。在我看来,(b)更容易阅读和逻辑遵循。不过两个都可以


(a)中的else与第一个if语句还是第二个if语句搭配?通过缩进的方式,我假设它与第一个if语句一致,但如果是这样,那么您的两个示例在逻辑上就不一样了。

您应该根据Justin的评论编辑您的示例。您正在寻找
if(cond)。。。else if(cond2){…}else{…}
if(cond)。。。else{if(cond2){…}else{…}
?或者正如Justin所说,嵌套的if和逻辑的and?谢谢。这是非常模糊的阅读(我甚至不知道正确的解析),所以请在第一种情况下在块周围添加大括号!你的两个版本不一样!考虑<代码> COND=真和<代码> COND2= false 。@ KeRek SB -我的两个版本不是等价的。第二个是为了在我使用嵌套的if语句时显示一个不同的条件。如果整个
if
块是另一个
if
语句,那就好了。如果在第二个
If
语句之前或之后有其他代码位,则尝试将其合并为一个决策结构可能会导致代码的严重重复。@Justin:您的第一个版本也不等同于OP的第一个版本。我真的不知道OP的第一个版本是用什么方法解释的,但这两种方法都和你的不一样。如果它们不相等,其中一个怎么可能更好呢?嵌套的if最简单的意思是“这是真的吗?如果是,这也是真的吗?”。else if是“这是真的吗?如果不是,那是真的吗?”。我只是在猜测OP的意图。如果没有编辑,我将撤回答案。@ray:是的,这是我的意图。我只是想知道在if块还是else块中嵌套if语句更好。谢谢你的澄清,@Bill。我编辑了我的答案以解决更新后的问题(在顶部)。@Ray当你说这个问题现在真的是一个风格问题并且归结到什么是最可读的问题时,你是说两者在性能方面是等价的(编译器认为它们是等价的)?第1个属于嵌套if。我现在编辑了这个问题。现在更清楚了:-)我编辑了我的答案,虽然现在我看到它基本上和雷说的一样。
if (cond1) {
    if (cond2) {
        A
    }
} else {
    B
}
if (cond1 && cond2) {
    A
} else {
    B
}
if (cond1) {
    A
} else {
    if (cond2) {
        B
    }
}
if (cond1) {
    A
} else if (cond2) {
    B
}