探讨一下 [if..else] 语句在 Java 和 JavaScrip 中的效率问题

2018 年 3 月 29 日
 CyberZCS

突然想到一个问题,在 Java 中

if(a > 1){
    return 2;
}else {
    return 0;
}

和

if(a > 1){
    return 2;
}
retrun 0;

这两种写法最终的效果是一样的,那么效率也是一样的吗?
在 JavaScript 中呢?

5867 次点击
所在节点    Java
42 条回复
airport0930
2018 年 3 月 29 日
今晚吃什么?
zhlssg
2018 年 3 月 29 日
......一般来说,优先选择第二种。但是肯定不是出于考量效率的角度
zwx327634
2018 年 3 月 29 日
我的习惯是,每个 if,都要有个 else 结尾,可读性强,业务上也减少遗漏问题。代码审查会度量 if 里的条件数量,else 不知道
shintendo
2018 年 3 月 29 日
如果两种写法是等价的,而写法 A 效率更高,那编译器为什么不把写法 B 自动优化成写法 A 呢
we2ex
2018 年 3 月 29 日
分支预测 了解一下
we2ex
2018 年 3 月 29 日
又想起了这个帖子 /t/441435
araraloren
2018 年 3 月 29 日
Your question is too simple!
vela
2018 年 3 月 29 日
@zhlssg Java 选一……和执行效率无关,而是可读性和可维护性考虑。
sdpfoue
2018 年 3 月 29 日
影响效率的地方千千万 唯独不需要考虑你提的这种东西
learnshare
2018 年 3 月 29 日
编译器会考虑这些问题,并不是写代码的时候该操的心
jmc891205
2018 年 3 月 29 日
Java 和 Javascript 我不知道
但是在 C++里编译器会把他们优化成同样的东西
mokeyjay
2018 年 3 月 29 日
js 的话,理论上第二种性能高一点吧
但这根本就能忽略不计,毫无意义
zhlssg
2018 年 3 月 29 日
@boywang004 好吧,我是写 js 的,airbnb 的 eslint 约束规则是必须用第二种
autoxbc
2018 年 3 月 29 日
用 node 跑了一下,没有区别

习惯上用第二种;多个特例的话,第一种会出魔鬼三角
flowfire
2018 年 3 月 29 日
卫语句了解一下
yejinmo
2018 年 3 月 29 日
大括号不换行影响性能
xuhaoyangx
2018 年 3 月 29 日
可读性 1 好
CyberZCS
2018 年 3 月 29 日
我的习惯是第一种写法,但是看到别人的代码里面有很多第二种写法,个人感觉可读性和维护性是不如第一种写法的。

所以就突然想到这个问题,这两种写法除了可读性方面的差别,那么在执行效率上会不会有什么差别呢?

也并不是纠结这个问题,所以说是探讨一下。

但是如果想劝公司里其他人也改用第一种写法(保持公司代码风格一致性),除了可读、可维护性更好,如果效率也更高,那么理由也就更充分一些。
CyberZCS
2018 年 3 月 29 日
@flowfire 不是什么情况都适合卫语句的,分支少,嵌套层级少的情况下,有什么必要用卫语句呢
sw0rd3n
2018 年 3 月 29 日
编译器会优化的,两种写法等价

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/442506

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX