据说优秀的代码没有 else?

2018-04-18 18:53:08 +08:00
 GoPHP

多个 if else 嵌套的代码估计大家都见过。。。头疼!

但是其实很多 if else 可以简化成一个 if,不需要 else,举个例子:

$books = getByAFunc()
if($books) {
   do something ...
   return something
}else {
   do something ....
   return something
}

看上去没什么毛病,但是根据业务需求,大部分是可以这么写:

if($books) {
     do something...
     return something
}
do something...
return something

这只是举个例子,很多时候满足条件的只有一种情况,那我们就可以针对这一种情况处理,其他情况直接 return !

还要一种写法是先处理可能出现的异常错误,然后最后执行下来的就是正确情况!

16859 次点击
所在节点    程序员
147 条回复
akira
2018-04-20 02:01:23 +08:00
@elvodn 没看过 go,好奇的问下,若 isSunny, isHappy 都为真,那么这个 switch 的前 3 个表达式的值都是真。这种情况下 switch 是怎么区分的呢
elvodn
2018-04-20 02:14:17 +08:00
@akira go 里 switch 是默认 break 的
goinghugh
2018-04-20 09:29:33 +08:00
@awing python 可以用字典的方式实现 switch case
zhouquan03
2018-04-20 09:43:53 +08:00
强烈反对写 if 不写 else
LZ 多写代码就会发现漏了 else 逻辑多么可怕
EanCuznaivy
2018-04-20 09:56:06 +08:00
有些 IDE 会提示你有不必要的 else ……
loveour
2018-04-20 10:06:47 +08:00
@zhouquan03
赞同。不明白非得不要 else 意义何在。。
pmispig
2018-04-20 10:22:27 +08:00
优秀的代码必须有 else,证明你有考虑到这种情况。
hatcloud
2018-04-20 11:36:10 +08:00
@loveour
其实不是反对 else 而是 else 带来的嵌套问题,就一层的话我觉得没什么问题。
我的理解是多层 if-else 很容易使代码呈现树状结构,很不易于他人阅读,而事实上大部分情况下,多层嵌套的 if-else 都可以通过 if-return 来替换成比较线性的代码。
@Chingim #115 的例子就很好
satanandroid
2018-04-20 11:58:47 +08:00
可读性好 逻辑清晰 就是优秀的代码。
和什么 else 不 else 一点关系都没
lloovve
2018-04-20 12:07:19 +08:00
弄成汇编都一样
r0ck3r
2018-04-20 12:08:35 +08:00
优秀的代码没有代码
wibile
2018-04-20 12:10:01 +08:00
优秀的人不写代码!
eloah
2018-04-20 12:11:33 +08:00
不,是没有性生活的
aliao0019
2018-04-20 12:37:26 +08:00
@Chingim 求知这个生成截图的工具是什么
Chingim
2018-04-20 12:46:54 +08:00
secretman
2018-04-20 12:51:33 +08:00
@wellsc 因为懒得处理,直接 throthrow 了
wizardoz
2018-04-20 12:59:07 +08:00
代码可以 if else,但是思维模式不能用 if else
就好比修改个功能,认为只要在某个地方加个 if else 就可以解决问题的,多半是坑。
wizardoz
2018-04-20 13:00:30 +08:00
@aliao0019 他这个就是 macOS 的系统截图 Command+shift+4 然后按空格键,就是窗口截图
solobat
2018-04-20 13:03:47 +08:00
以前公司培训说不写 else,后面写多了发现,写上 else 最放心了。
ryd994
2018-04-20 13:15:59 +08:00
其实编译器会优化成一样的
第一种写法主要用于有大量错误检查的情况,可以 fail fast
避免代码嵌套过多

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

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

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

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

© 2021 V2EX