【问题标题】:if..else vs if(){return} [duplicate]if..else vs if(){return} [重复]
【发布时间】:2011-08-03 18:06:20
【问题描述】:

在以下示例中 - 鉴于返回值并不重要 - 是否有理由更喜欢其中一种方法?

// Method 1
function (a, b) {
  if (a == b){
    // I'm just interested in
    // the stuff happening here
  } else {
    // or here
  }
return true;
}

// Method 2
function (a, b) {
  if (a == b){
    // I'm just interested in
    // the stuff happening here
    return true;
  }
  // or here
  return true;
}

【问题讨论】:

  • 您可能希望使用== 而不是=,因为您是在比较而不是设置值。 ;) 一个简单的return a == b; 有时也可以解决问题。
  • 只是出于好奇,为什么要写一个总是返回true或者返回值没有意义的方法呢​​?没有边缘情况吗?
  • 如果返回值不重要,那为什么还要显式返回呢?让代码“通过”。
  • a === b 优于 a == b 以防止类型强制
  • 我只是想明确一点,我真的不在乎结果,就好像它总是一样的。

标签: javascript


【解决方案1】:

似乎最佳实践(主要是我工作过的地方)是在方法或函数的顶部设置默认值,并且仅在发生某些情况时更改这些值。因此,不需要使用else,因此首选方法2。

由于示例是 JavaScript,因此需要特别注意代码大小。所以方法 2 会为相同的功能创建更少的代码,进一步将其参数作为首选。

但是,如果您有超过 2 个可能的条件,则无法避免 else 或 else if。但是,在这些情况下,我工作过的大多数地方都更喜欢 Switch Case。

【讨论】:

    【解决方案2】:

    我更喜欢方法 1,因为它不易阅读。此外,重复代码更少。

    【讨论】:

    • 这真的是一种风格的东西,一个是更具声明性的(如果不是的话),另一个是更简洁的。我自己也更喜欢第二个。
    • 我不同意。拥有多个 return 语句会使代码更难遵循(想想递归!),尤其是在可以避免的情况下。在这种情况下,我们总是返回 true!
    • 你说得对,我是说方法1
    【解决方案3】:

    我会根据代码的清晰度和可读性做出决定,即:

    • 当你需要在 if 块之后的块中做更多的事情时,选择方法 1。
    • 只需要两段代码的时候选择方法2,这样读起来更清晰
    • 如果您明确认为如果没有“else”一词,您的读者将无法理解您的神秘代码,请再次选择方法 1;当块大于几行时,这很常见。

    今天的许多程序员都认为缩进更少更容易阅读,我同意。在这种情况下,一般首选应该使用第二种方法。

    【讨论】:

      【解决方案4】:

      我会推荐方法 1,因为它更具可读性和自我记录。

      【讨论】:

      • 不同意它更具可读性。更多的嵌套通常会使代码的可读性降低,并且被认为是不好的做法。因此,我认为省略 else 条件是更好的做法。
      • 但是如果你想在他的代码中编辑,你能轻松理解业务逻辑吗?!
      • 阅读多层嵌套 if/else 更难理解业务逻辑,恕我直言。
      • 我非常感谢您的意见,但可能是因为在开发过程中我使用 if else 作为我的选项,所以我习惯于更快地理解它。
      • 每个人的口味都不一样 :)
      【解决方案5】:

      任何现代浏览器的解释器都应该消除任何一个方向的性能优势。

      方法 1 更可取的原因有几个尚未提及。有一个单点退出使得任何需要两个分支共同的操作的未来修改更容易并且不太可能出现错误(因为作者错过了早期返回。类似地,在某些情况下,它通过提供一个公共位置来简化调试放置断点或 alert()。

      【讨论】:

        【解决方案6】:

        这里的可读性真的取决于函数的作用。

        如果这个函数总是返回true,那么我更喜欢方法1 很明显,因为它只返回一个地方,而且很容易看出它永远是true。

        在上述情况下,方法二比较混乱。它在多个地方返回,因此更加混乱。考虑开发人员不必要地遍历可能的分支,然后查看它们如何影响返回值。在这种简单的情况下,这没什么大不了的,但是当您获得更复杂的条件时,我真的会避免这种方法。

        如果 if 块中的代码很少,我只会使用方法 2。比如处理边缘情况的东西。

        希望对您有所帮助。

        【讨论】:

          猜你喜欢
          • 2012-03-05
          • 2012-01-10
          • 1970-01-01
          • 1970-01-01
          • 2017-02-05
          • 2015-10-28
          • 2012-02-29
          • 2015-10-20
          • 2014-08-08
          相关资源
          最近更新 更多