使用“ if / elseif / else”与“ if / else {if / else}”

我发现自己非常普遍使用这样的模式:
if (a > b) {
    foo();
}
elseif (c > d) {
    bar();
}
else {
    baz();
}
这里的要点是第二个条件显然与第一个条件没有关联,除非你仔细遵循程序逻辑。这是一件非常糟糕的事吗?将上述内容称为是否更可取
if (a > b) {
    foo();
}
else {
    if (c > d) {
        bar();
    }
    else {
        baz();
    }
 }
出于可维护性原因?有没有一个我完全错过的更好的模式? “没有明显连接”的位似乎是我的代码中更常见的错误源之一。     
已邀请:
这并不重要。 我更喜欢Leaky Rowboat *模式:
if (a > b) 
{
    foo();
    return;
}

if (c > d) 
{
    bar();
    return;
}
baz();
当你回来的时候哪个更好:
if (a > b) 
    return foo();

if (c > d) 
    return bar();

return baz();
*提前保释,快速保释     
我认为第一个绝对是可取的。我唯一一次使用第二种方法是将代码放在不在内部if / else中的外部else中。 当我看到别的时候,我立即寻找if。所以我会说这显然是有联系的。     
我觉得这是代码味道。你在这里做什么,或者你为什么这么做,这不是很明显。事实上,你认为它们没有明显的连接,而且它们经常是bug的来源,这告诉你不要这样做。 重写此代码,以便您明确分配这些条件的原因。理想情况下,您将能够阅读代码并让它表达您的意图和/或您的规格。
taller_than_wide = a > b;
more_expensive_than_normal = c > d;

if (taller_than_wide) {
      foo();
}
elseif (more_expensive_than_normal) {
      bar();
}
else {
      baz();
}
    
我避免使用第二种方法,因为它会导致大型条件的大量缩进。     
我当然会使用第一个,因为它比第二个更具可读性。 第二个选项将强制读者记住哪些条件必须是真实的,以便进入嵌套的
if
,它在每个时刻读取,在第三个或第四个嵌套
if
这变得非常烦人,非常脆弱,在逻辑上很难遵循。     

要回复问题请先登录注册