0

对于基本的选择语句,我最近开始使用 Snippet 2 而不是 Snippet 1。这似乎有点不合常规,所以我想知道是否存在性能差异,或者一个似乎比另一个更具可读性。

片段 1

function foo() {
    if(case1){
        //...
    } else if (case2) {
        //...
    } else if (case3) {
        //...
    } else{
        // catch other cases
    }
}

片段 2

function foo() {
    if(case1){
        //...
        return;
    }
    if(case2){
        //...
        return;
    }
    if(case3){
        //...
        return;
    }
    // catch other cases
}
4

5 回答 5

3

你的片段是一样的。但elseif即使我回来我也会使用。这让我感觉这些if陈述是相关的,并帮助我提高了可读性。

if ... else比方说,当您使用if相同的变量时,也有助于提高性能。如果前一个条件成功,为什么还要测试一个条件?elseif它,所以它不会再试一次。

这是设计问题。 这取决于您想要实现的目标,因此没有确切的最佳方法。这完全取决于您需要如何退出包含ifs 的代码块。

于 2013-07-02T15:46:48.893 回答
1

单独的Ifs 意味着所有条件都可能发生 - 它们将被一一检查。链接if-else语句意味着实际上只有一个条件会发生——如果其中一个条件被执行,我相信它会跳过所有其他条件。大多数语言switch也支持语句,这比将一堆if-else-if语句链接在一起更具可读性。如果我错了,请纠正我,但我相信这适用于我迄今为止使用的每种语言。

编辑:在这种特殊情况下(正如下面其他一些人所指出的 - 谢谢),由于return每个语句中的语句,所有条件都不会发生if。不过,在更一般的情况下,我的解释仍然成立。

于 2013-07-02T15:44:13.320 回答
0

这取决于您的需求。一般来说,函数的出口点越多,阅读起来就越困难。也就是说,通常有以下好处

if(somehting)
{
    // one liner;
    return;
}
if(something else)
{
    // 30 lines of something else.
    return;
}
// catchall

代替:

if(something)
{
    // one liner;
    return;
}
else if(something else)
{
    // now nested! 30 lines.
    return;
}

但是,您可能可以通过将这些条件转换为它们自己的函数来使事情变得更容易阅读。这不是很好吗:

if(something)
{
    doSomething();
}
else if(something else)
{
    doSomethingElse();
}
else
{
    doJustElse();
}

最后一个的好处?简洁,清晰,干净,明显,学习曲线低。

于 2013-07-02T15:47:28.067 回答
-1

当您不需要满足案例 3 时,片段 1 的性能会更好,因为另一个else if不会被解雇。但是,如果你有很多 other else if,你应该使用switch

于 2013-07-02T15:46:59.047 回答
-1

如果您有太多else if语句,那么最好使用switch而不是使用if.

于 2013-07-02T15:45:49.317 回答