今天被要求把這段改成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);
}
請幫忙分析下哪種好,為什麼:)
1
cnhongwei 2015-04-01 11:01:37 +08:00
程序当然只有一个出口好。
|
2
yangqi 2015-04-01 11:07:09 +08:00
两个逻辑关系完全不一样的,严格讲当然是if else更加严谨,而且也更加容易明白
|
3
Phariel 2015-04-01 11:07:27 +08:00
多入口单出口,准则。
|
4
zhujinliang 2015-04-01 11:17:14 +08:00
带else的好,这个操作跟return没大关系,return可能会对理解有些干扰,再者保不齐之后要加点别的操作呢。。
一般分支决定return啥的话,会写成 if (a) { return A; } return B; 其他情况下不大会省略else |
5
angelface 2015-04-01 11:20:16 +08:00
if else的逻辑性会很好, if (x) return主要是防御性编程, 更多的时候是用来处理代码中的异常分支。
|
6
df4VW 2015-04-01 11:32:29 +08:00
Use a guard clause instead of wrapping the code inside a conditional expression.
|
7
fliar OP 嘿嘿,其实我是同意@df4VW,不过我还是愿意听听大家怎么说
我个人觉得一堆if else if无论逻辑性和可读性都不如if return 至于多入口单出口,抱歉我愚昧不知道这准则,但是我想也不会有人为了这准则都用回goto:) 有冒犯的话先陪个不是,不好意思啦请不要生气,这个例子其实我想两个不会差很多 |
8
funagi 2015-04-01 12:02:30 +08:00
个人以前常用else,现在常用return,偶尔用用else,视具体情况而定,没有绝对的谁优谁劣。
当执行到return,意味着后面的代码不用浪费时间看了。 用if return方便把混在一起的逻辑拆开,实现代码块单一职责。 |
9
xylophone21 2015-04-01 12:38:04 +08:00
如果你的函数有资源回收之类的时,你会发现goto都忍不住用啊. 要不怎么会有do{}while(0)这种呢
|
10
yleo77 2015-04-01 13:10:59 +08:00 via iPhone
以前是 if else, 现在是 return ,以后也return。
当然不绝对。 这有一定程度上属于编程风格,但我视这种风格的转变为程序员成长的一个小体现。 |
11
invite 2015-04-01 13:35:18 +08:00
看到标题就想到这个了。
|
12
tsxm 2015-04-01 14:35:09 +08:00
喜欢return,无用逻辑早点结束,不然套的if else太深
|
13
newtonisaac 2015-04-01 14:40:25 +08:00
return, 看得清楚比看不清楚好。
|
14
xsseroot 2015-04-01 14:41:48 +08:00
第二个,逻辑更清晰~
|
15
humiaozuzu 2015-04-01 14:44:17 +08:00
都可以,看语言的动态类型还是静态的。。。
|
16
kk71 2015-04-01 17:54:41 +08:00
return
|
17
lepture 2015-04-01 17:58:34 +08:00
看你的语言有没有偏好。个人偏好 return early
|
18
Mutoo 2015-04-01 18:06:35 +08:00
return,及早结束。
|
19
sb 2015-04-01 18:10:58 +08:00
偏向 if else
|
20
akira 2015-04-01 18:27:26 +08:00
if else的 代码结构化更好。
有时候会出现多个退出条件的判断,这种情况下个人更偏向第一种写法。 |
22
lidashuang 2015-04-01 18:31:50 +08:00
没有return的语言只能用if else了
|
23
cxshun 2015-04-01 18:32:04 +08:00
以前喜欢if else,现在喜欢return,没用的代码早点结束,看着舒服多了,而且嵌套层次也可以少点。
|
24
ellipse42 2015-04-01 23:57:04 +08:00
raise
|
25
Septembers 2015-04-02 03:55:09 +08:00 via Android
|
26
Septembers 2015-04-02 03:58:58 +08:00 via Android
修正 单出口 我是指function内只有一个return
|
27
blue7wings 2015-04-02 09:32:20 +08:00
我还是比较倾向于第一个的,但是如果有多个if,我更喜欢用goto语句:
if(file_exists($fn)){ //printf("it is a file\n"); $re = $serv->sendfile($fd, $fn); //printf("Send %s\n", $re ? "Success" : "Failed"); goto end; } if (condition) { //something error goto end; } $serv->send($fd, $result); end: return false; 有点try-catch的意思了... |
28
iyangyuan 2015-04-02 13:09:48 +08:00
虽然单出口是原则,但我还是觉得有时候用return 可以使代码很简洁易读,读者不必读完整个代码段。尤其是在做参数合法性的时候。
|