据说优秀的代码没有 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 条回复
HuangLibo
2018-04-19 13:05:36 +08:00
这世界上没有最好的语言(除了 PHP), 也没有最好的设计模式, 到底要不要写 if...else 以及是否需要多个 return, 都要根据具体情况来做选择.

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

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

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

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

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

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

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

© 2021 V2EX