在功能中哪个更有效:条件执行或条件退出?

时间:2018-11-09 19:19:19

标签: javascript typescript

我真的会听到一些意见,认为以下哪种解决方案在JavaScript / TypeScript中更有效:

function whatever(param) {
   if (param === x) {
      doStuff();
   }
}

function whatever(param) {
   if (param !== x) { return false; }
   doStuff();
}

很显然,第二个代码减少了块的数量并提高了代码的可读性,但是与第一个代码相比,它有什么优点或缺点吗?

4 个答案:

答案 0 :(得分:4)

在汇编中,您都将写为:

 // first
 whatever:
   CP x, param
   JP nz, whatever2
   CALL doStuff
whatever2:
   RET

// second:
whatever:
  CP x, param
  JP z, whatever2
  RET
whatever2:
  CALL doStuff
  RET

因此,尽管第一个使用4条指令,第二个使用5条指令。所以,如果JS引擎能够将其优化到此最佳字节码(这不太可能,但是它使估计更容易),第二个将为1滴答声变慢,小于一纳秒。

答案 1 :(得分:3)

Here是一项测试,其中我进行了10000次比较。

几乎没有区别。

答案 2 :(得分:1)

即使您的功能中有多个前提条件之一,效率也没有显着差异。无论您使用哪种语言。一些编译器甚至可能会从这两个版本生成相同的机器指令。

不要过多考虑效率。考虑一下可读性和可维护性!

答案 3 :(得分:1)

这取决于这里的用例,我认为在性能或代码可读性方面没有太大区别。

我个人会采用第二种方法,因为它也减少了缩进。缩进让我清楚地指示了新块的初始化。如果我发现一个新的缩进,我会认为这里应该有一个for循环或一个if语句。

如果代码是主要流程或最常见流程的一部分,我不希望进一步缩进。

同样,所有这些都是我的个人风格指南规则,这些规则帮助我能够更快地推断出代码逻辑。