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

2018-03-29 15:03:37 +08:00
 Asimov01

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

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

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

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

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

习惯上用第二种;多个特例的话,第一种会出魔鬼三角
flowfire
2018-03-29 16:52:40 +08:00
卫语句了解一下
yejinmo
2018-03-29 16:59:13 +08:00
大括号不换行影响性能
xuhaoyangx
2018-03-29 17:00:09 +08:00
可读性 1 好
Asimov01
2018-03-29 17:07:36 +08:00
我的习惯是第一种写法,但是看到别人的代码里面有很多第二种写法,个人感觉可读性和维护性是不如第一种写法的。

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

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

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

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

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

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

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

© 2021 V2EX