据说优秀的代码没有 else?

2018 年 4 月 18 日
 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 !

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

19287 次点击
所在节点    程序员
147 条回复
HuangLibo
2018 年 4 月 19 日
这世界上没有最好的语言(除了 PHP), 也没有最好的设计模式, 到底要不要写 if...else 以及是否需要多个 return, 都要根据具体情况来做选择.

有的人啊, 总想搞个大新闻, 还是要提高自己的恣肆水平(手动长者脸)
laqow
2018 年 4 月 19 日
不同语言特点不一样,PHP 做逻辑判断的手段很多,或运算和三目运算就已经解决大部分简单逻辑了,view 部分用这些代码还简洁些,python 写太复杂缩进看的眼晕,抛异常退栈和各种语法糖看着简单些,至于 c 一类的能怎么严谨写怎么严谨最好,不然出 bug 的时候能死人
yiplee
2018 年 4 月 19 日
aokihu
2018 年 4 月 19 日
if 一定要跟 dlse 配套,否则会出现低级逻辑错误
dychenyi
2018 年 4 月 19 日
看情况吧。 这种我倒是经常写。
if (! pointer )
return;
pointer->doSomething();
shyrock
2018 年 4 月 19 日
优秀的代码?没有!
keelii
2018 年 4 月 19 日
然而一般情况是 BUG 总出现在没写 else 上!
honeycomb
2018 年 4 月 19 日
不用 else,而是用 guard 方式,很多时候是为了 if else 层级过多导致的错误。

如果层级很简单,为什么不用?
chenyu0532
2018 年 4 月 19 日
据说优秀的程序员都不用手敲代码,用嘴敲
picasso2501
2018 年 4 月 19 日
if 和 return 配,和 break 配。
需要写 else 的人,函数体都很长,过得都很辛苦。
supermao
2018 年 4 月 19 日
@noNOno 这个说法其实有点片面,如果 if 里直接有 return 的,不需要有 else,多此一举,否则还是需要 else
Phariel
2018 年 4 月 19 日
多入口 单出口 这是我 coding 的原则
peinhu
2018 年 4 月 19 日
个人认为,不是“优秀的代码没有 else ”,而是“优秀的代码没有 if else ”,都是用各种设计模式拆分成更细分的单独类了,不过那样需要很高的编码水平,以及会把代码复杂化,导致别人可能一时半会儿看不懂你的代码,而且写起来也慢,实现相同功能的代码量更多。
Ixizi
2018 年 4 月 19 日
优秀的代码没有分号(
iyangyuan
2018 年 4 月 19 日
个人习惯吧,逻辑清晰就好,我就比较少用
iwishing
2018 年 4 月 19 日
说自己的代码用 if 从来不用 else 的,就好像是说自己的代码从来没有 bug 一样
一个条件判断输入的变量,一般来讲有 4 种情况,true,false,null,'',后三者都会走 else,不走 else 就要在之前全部判定掉
不管怎么说,加 else 是个好习惯
jalena
2018 年 4 月 19 日
全用三目运算符算不算没有 if 或 else。???
alexnevsky
2018 年 4 月 19 日
怎么写要看什么情况,可读性和性能挑一个。优秀的人早升官不写了
lfzyx
2018 年 4 月 19 日
请用逻辑来理解 if else 的逻辑意义,而不是从什么可读性,优雅性,来看待这个逻辑
wweir
2018 年 4 月 19 日
来个 if else 互相嵌套十层,估计就没人会质疑 if 搭配 return 的玩法了。

要知道,复杂逻辑的分支结构,来个十层嵌套并不算过份。当然,会需要这类代码的地方不多。
一般我们会用抽取函数、方法之类的方式,让代码清晰一点

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

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

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

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

© 2021 V2EX