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

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

17739 次点击
所在节点    程序员
147 条回复
AckywOw
2018-04-19 10:38:41 +08:00
优秀的代码,该有的 else 必须有,这么多的 return 才是不推荐的
inkWave
2018-04-19 10:39:39 +08:00
@cloudzhou 请问是有哪些书本还是文章吗?我一直看到的,听到的,都是建议写上 else.没见过推荐尽力减少 else 的.
di94sh
2018-04-19 10:46:00 +08:00
@zj299792458 装饰器。
cnbobolee
2018-04-19 10:50:53 +08:00
哪有什么优秀不优秀,既然语言设计出了这玩意,就必有他存在的理由。
Felldeadbird
2018-04-19 10:55:18 +08:00
JS 这么干就是作死。
ai277014717
2018-04-19 10:55:35 +08:00
没有 else 可读性直线下降。
else 可以有,不宜嵌套太多。
xubeiyan
2018-04-19 10:59:26 +08:00
都 8021 年了还有人在吹垠神吗
monkeylyf
2018-04-19 11:03:57 +08:00
if 是不能完全避免的,好的数据结构或算法可以让 if 的出现频率减少。
if 如果是在函数头部简短的做 condition check,个人觉得可以不写 else。但是如果不简短,尽量加 else。
如果有 elseif,那尽量加 else,即使 else block 里面什么都不做。
cluulzz
2018-04-19 11:07:13 +08:00
@des #31 这仓库...天才...
qwertyiuop
2018-04-19 11:09:01 +08:00
不对 你们说的都不对

优秀的代码应该没有 BUG
agagega
2018-04-19 11:12:04 +08:00
垠神的逻辑很好理解啊。你想想函数式语言,真没有副作用了,全都是表达式,没有隐式 null,那有 if 就必有 else,逼着你理清代码,然后用 Maybe Monad 这样的东西整理逻辑,不然层层 if else 写起来就像回调地狱。

而如果你不在乎副作用,而且本来就需要一堆 Guard Condition,像楼主的方法就很清晰。
qianmeng
2018-04-19 11:14:41 +08:00
if else 只是一个工具而已,在考虑效率和功能的基础上,才能研究这些东西,我觉得 else 是不可缺少的,因为总有挑战程序员的事情出现
xiaowangge
2018-04-19 11:38:21 +08:00
游戏业务逻辑了解一下?

各种 if else else else
china521
2018-04-19 11:48:09 +08:00
if else 是什么东东,我写代码只有 cmp jnz xchg 这些。好高大上的样子. -:)
GoPHP
2018-04-19 12:02:42 +08:00
各位大佬说的都对
guoli100
2018-04-19 12:05:45 +08:00
haskell 等函数式语言,if 也是表达式,所以必须要有 else。

好处是你可以用 if 来赋值了。
locktionc
2018-04-19 12:08:34 +08:00
给一个 Python 的写法,不用 if

```python

def parse_right_answer():
xxxx

def parse_wrong_answer():
yyy

def parse_other():
zzz

swith = {'true': parse_right_answer, 'false': parse_wrong_answer}

switch.get(answer, parse_other)()
```
bumz
2018-04-19 12:08:55 +08:00
有 if 没 else 通常意味着你没考虑周全。

即便 else 中不需要代码(如不需要副作用),也应当写上以表明这种情况自己考虑了。

允许有 if 没 else 容易写到一半忘记考虑另一半的可能性了,所以应当禁止。
sike03
2018-04-19 12:32:38 +08:00
我习惯在一个方法开始时,先去判断所有异常情况,有异常直接 return。最后再去写正确时的逻辑。
jmu
2018-04-19 12:54:18 +08:00
一锤定音:题主和一些答主肯定没看过《 cc 》,请没看过的赶快看相关章节。看过的就直接绕道吧,不要强答了,能说清楚还要那么厚的书干嘛

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

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

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

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

© 2021 V2EX