else 和 return,你喜歡哪種?

2015-04-01 10:50:55 +08:00
 fliar

今天被要求把這段改成else
if(file_exists($fn))
{
//printf("it is a file\n");
$re = $serv->sendfile($fd, $fn);
//printf("Send %s\n", $re ? "Success" : "Failed");
return;
}
$serv->send($fd, $result);
改成
if(file_exists($fn))
{
//printf("it is a file\n");
$re = $serv->sendfile($fd, $fn);
//printf("Send %s\n", $re ? "Success" : "Failed");
}
else
{
$serv->send($fd, $result);
}
請幫忙分析下哪種好,為什麼:)

4807 次点击
所在节点    PHP
28 条回复
cnhongwei
2015-04-01 11:01:37 +08:00
程序当然只有一个出口好。
yangqi
2015-04-01 11:07:09 +08:00
两个逻辑关系完全不一样的,严格讲当然是if else更加严谨,而且也更加容易明白
Phariel
2015-04-01 11:07:27 +08:00
多入口单出口,准则。
zhujinliang
2015-04-01 11:17:14 +08:00
带else的好,这个操作跟return没大关系,return可能会对理解有些干扰,再者保不齐之后要加点别的操作呢。。

一般分支决定return啥的话,会写成
if (a) {
return A;
}
return B;
其他情况下不大会省略else
angelface
2015-04-01 11:20:16 +08:00
if else的逻辑性会很好, if (x) return主要是防御性编程, 更多的时候是用来处理代码中的异常分支。
df4VW
2015-04-01 11:32:29 +08:00
Use a guard clause instead of wrapping the code inside a conditional expression.
fliar
2015-04-01 11:42:40 +08:00
嘿嘿,其实我是同意@df4VW,不过我还是愿意听听大家怎么说
我个人觉得一堆if else if无论逻辑性和可读性都不如if return
至于多入口单出口,抱歉我愚昧不知道这准则,但是我想也不会有人为了这准则都用回goto:)
有冒犯的话先陪个不是,不好意思啦请不要生气,这个例子其实我想两个不会差很多
funagi
2015-04-01 12:02:30 +08:00
个人以前常用else,现在常用return,偶尔用用else,视具体情况而定,没有绝对的谁优谁劣。
当执行到return,意味着后面的代码不用浪费时间看了。
用if return方便把混在一起的逻辑拆开,实现代码块单一职责。
xylophone21
2015-04-01 12:38:04 +08:00
如果你的函数有资源回收之类的时,你会发现goto都忍不住用啊. 要不怎么会有do{}while(0)这种呢
yleo77
2015-04-01 13:10:59 +08:00
以前是 if else, 现在是 return ,以后也return。

当然不绝对。 这有一定程度上属于编程风格,但我视这种风格的转变为程序员成长的一个小体现。
invite
2015-04-01 13:35:18 +08:00
看到标题就想到这个了。
tsxm
2015-04-01 14:35:09 +08:00
喜欢return,无用逻辑早点结束,不然套的if else太深
newtonisaac
2015-04-01 14:40:25 +08:00
return, 看得清楚比看不清楚好。
xsseroot
2015-04-01 14:41:48 +08:00
第二个,逻辑更清晰~
humiaozuzu
2015-04-01 14:44:17 +08:00
都可以,看语言的动态类型还是静态的。。。
kk71
2015-04-01 17:54:41 +08:00
return
lepture
2015-04-01 17:58:34 +08:00
看你的语言有没有偏好。个人偏好 return early
Mutoo
2015-04-01 18:06:35 +08:00
return,及早结束。
sb
2015-04-01 18:10:58 +08:00
偏向 if else
akira
2015-04-01 18:27:26 +08:00
if else的 代码结构化更好。

有时候会出现多个退出条件的判断,这种情况下个人更偏向第一种写法。

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

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

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

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

© 2021 V2EX