我真的会听到一些意见,认为以下哪种解决方案在JavaScript / TypeScript中更有效:
function whatever(param) {
if (param === x) {
doStuff();
}
}
或
function whatever(param) {
if (param !== x) { return false; }
doStuff();
}
很显然,第二个代码减少了块的数量并提高了代码的可读性,但是与第一个代码相比,它有什么优点或缺点吗?
答案 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语句。
如果代码是主要流程或最常见流程的一部分,我不希望进一步缩进。
同样,所有这些都是我的个人风格指南规则,这些规则帮助我能够更快地推断出代码逻辑。