在JavaScript中使用'return'而不​​是'else'

jef*_*eon 21 javascript optimization if-statement

我正在开发一个需要一些非常复杂的JavaScript处理的项目.这包括许多嵌套if- else在很多地方.通过阅读Stack Overflow上的其他技巧,我一般都会尽可能地优化JavaScript代码,但我想知道以下两个结构是否会对速度方面产生任何影响:

if(some_condition) {
    // process
    return ;
}

// Continue the else condition here
Run Code Online (Sandbox Code Playgroud)

VS

if(some_condition) {
    // Process
}

else {
   // The 'else' condition...
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*ola 19

我总是采用第一种方法.更容易阅读,减少缩进.就执行速度而言,这将取决于实现,但我希望它们都是相同的.

  • 我恭敬地不同意你的不同意见.根据我的经验,使用这种类型的构造从未影响可维护性.如果有的话,它会让它变得更好; 嵌套语句的数量越少,我的可维护性就越高.但是,我同意你关于有太多"回归点"的评论.通常,我只在函数的开头和结尾有返回点.在明显排除的开始,并在最后服务于功能目的. (9认同)
  • 我不同意.也许更容易阅读,但更难维护,更难的不是你,而是任何其他开发人员必须了解代码.总的来说,这是关于具有太多"返回"点的函数的看法. (8认同)
  • 双方都有优点.我个人的经验是,太多嵌套的if-elses是一场噩梦 - 特别是如果这两个条件中的一个真的很短,那么我们可以使用return语句来快速终止它.这绝对使它更具可读性. (6认同)

CMS*_*CMS 5

在许多语言中,反转if语句以减少嵌套或使用前提条件是一种常见的做法。

并且减少代码中的嵌套可以提高代码的可读性和可维护性。


Sud*_*r N 5

在排除无效情况时我会使用第一种方法。

例如。在进行某些验证时使用第一种方法,如果任何验证失败则返回。如果任何一个先决条件不成立,那么进一步就没有意义了。Martin fowler 在他的《重构》一书中也提到了同样的事情。他称之为“用保护条款取代条件”。而且确实可以让代码变得容易理解。

这是一个 java 示例。

  public void debitAccount(Account account, BigDecimal amount) {
    if(account.user == getCurrentUser()) {
      if(account.balance > amount) {
           account.balance = account.balance - amount
       } else {
          //return or throw exception
       }
    } else {
        //return or throw exception
    }
  }
Run Code Online (Sandbox Code Playgroud)

VS

 public void debitAccount(Account account, BigDecimal amount) {
    if(account.user != getCurrentUser()) return //or error
    if(account.balance < amount) return //or error
    account.balance = account.balance - amount    
}
Run Code Online (Sandbox Code Playgroud)