据说优秀的代码没有 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 !

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

16849 次点击
所在节点    程序员
147 条回复
phpcxy
2018-04-18 23:02:07 +08:00
优秀的人写坨翔都优秀。
willzhang
2018-04-18 23:44:39 +08:00
No Code is the best code.
rosu
2018-04-18 23:51:34 +08:00
怕的是选择结构多层嵌套。尽早 return
GenkunAbe
2018-04-18 23:52:32 +08:00
优秀的女生是没有性生活的。
Kongtou
2018-04-18 23:54:20 +08:00
优秀的程序员是不写前端的
easylee
2018-04-19 00:01:44 +08:00
优秀的代码连变量名都没有。(认真脸.jpg )
Akarin
2018-04-19 00:15:38 +08:00
raawaa
2018-04-19 00:35:24 +08:00
你的想法特别的 JavaScript😂
secondwtq
2018-04-19 00:35:37 +08:00
@jukka Pattern Matching 点赞
不过其实 if else expression 可以看做对 boolean 的 pattern matching 的语法糖,所以 expression based 也很重要
tangzhangming
2018-04-19 00:38:06 +08:00
业务发展快,又挣钱的公司代码都特别烂 --- 鲁迅
gabon
2018-04-19 00:42:55 +08:00
if(condition){doshit()} if(! condition){dosomeshit()}这样可以吗
crb912
2018-04-19 08:24:11 +08:00
The else isn't needed,but it does help the casual reader understand the intent. —— 《 C++ Primer Plus 》第六版 p308.

翻译:else 并不是必须的,但是它可以帮助粗心的程序员理解意图。

就像,符号明明存在优先级,有时候明明不需要括号,却还要加括号。换句话说,代码是给别人看的,方便别人理解。
gimp
2018-04-19 08:38:13 +08:00
定义变量,if...else...进行差异化赋值,结尾统一 return
huluhulu
2018-04-19 09:13:48 +08:00
有 goto 就好了不需要 else
projectzoo
2018-04-19 09:48:44 +08:00
有些编码规范要求 if 一定要带 else。
具体原因你可以看下:悬挂 else
shihty5
2018-04-19 09:48:47 +08:00
考虑到大部分人写的代码都是业务代码,每个地方最好都有 else。
e.g. 调用银行接口,000000 是成功,ERR 打头的是失败,其他不在返回码列表里的至少要打个日志或者抛个错误出来。不然到时候排查问题就死定了 0.0,系统高可用 4 个 9 瞬间变为 3 个 9
th00000
2018-04-19 10:04:29 +08:00
一般的代码为了性能都会要求快速失败, 优先判断失败的规则, 测试起来也更方便, 所有 else 很少能见到
以上
cloudzhou
2018-04-19 10:15:58 +08:00
@noNOno
我当时看 yinwang 都惊讶了,因为几乎所有的编程实践,都是推荐尽力减少 else
yinwang 是某一方面的专家,但不一定是一个精通写代码的人,你要知道这两方面的区别。不要盲目随从。

你可以看一下 @zxybird 的解释
prolic
2018-04-19 10:20:53 +08:00
这话题如果换到知乎,就已经有好几篇仿优秀的女生没有性生活的段子出来了
noNOno
2018-04-19 10:27:18 +08:00
@cloudzhou 看了.
我觉得这里讲得 if/else 只是表象.
本质上的好处是,在写代码时,将自己代码的潜在问题,自己解决掉,而不是将问题放到其他地方.

if/else 就是最好的例子,写了 if 不写 else,那么看代码的人遇到 else 的情况就需要重新思考.

每个人的代码习惯都是信仰,不要争论为好~~
^-^

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

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

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

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

© 2021 V2EX