fliar
V2EX  ›  PHP

else 和 return,你喜歡哪種?

  •  
  •   fliar · Apr 1, 2015 · 6351 views
    This topic created in 4237 days ago, the information mentioned may be changed or developed.

    今天被要求把這段改成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);
    }
    請幫忙分析下哪種好,為什麼:)

    28 replies  •  2015-04-02 13:09:48 +08:00
    cnhongwei
    cnhongwei
    Apr 1, 2015
    1
    程序当然只有一个出口好。
    yangqi
    yangqi
    Apr 1, 2015
    2
    两个逻辑关系完全不一样的,严格讲当然是if else更加严谨,而且也更加容易明白
    Phariel
    Phariel
    Apr 1, 2015
    3
    多入口单出口,准则。
    zhujinliang
    zhujinliang
    Apr 1, 2015
    4
    带else的好,这个操作跟return没大关系,return可能会对理解有些干扰,再者保不齐之后要加点别的操作呢。。

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

    当然不绝对。 这有一定程度上属于编程风格,但我视这种风格的转变为程序员成长的一个小体现。
    invite
    invite
    Apr 1, 2015
    11
    看到标题就想到这个了。
    tsxm
    tsxm
    Apr 1, 2015
    12
    喜欢return,无用逻辑早点结束,不然套的if else太深
    newtonisaac
    newtonisaac
    Apr 1, 2015
    13
    return, 看得清楚比看不清楚好。
    xsseroot
    xsseroot
    Apr 1, 2015
    14
    第二个,逻辑更清晰~
    humiaozuzu
    humiaozuzu
    Apr 1, 2015
    15
    都可以,看语言的动态类型还是静态的。。。
    kk71
    kk71
    Apr 1, 2015
    16
    return
    lepture
    lepture
    Apr 1, 2015
    17
    看你的语言有没有偏好。个人偏好 return early
    Mutoo
    Mutoo
    Apr 1, 2015
    18
    return,及早结束。
    sb
    sb
    Apr 1, 2015
    19
    偏向 if else
    akira
    akira
    Apr 1, 2015
    20
    if else的 代码结构化更好。

    有时候会出现多个退出条件的判断,这种情况下个人更偏向第一种写法。
    xmbaozi
    xmbaozi
    Apr 1, 2015 via Android
    21
    @angelface 赞同
    G2bN4dbX9J3ncp0r
    G2bN4dbX9J3ncp0r
    Apr 1, 2015
    22
    没有return的语言只能用if else了
    cxshun
    cxshun
    Apr 1, 2015
    23
    以前喜欢if else,现在喜欢return,没用的代码早点结束,看着舒服多了,而且嵌套层次也可以少点。
    ellipse42
    ellipse42
    Apr 1, 2015
    24
    raise
    Septembers
    Septembers
    Apr 2, 2015 via Android
    25
    @Phariel
    单出口 大多数情况下会提高代码复杂度
    尽可能降低代码复杂度更为重要

    完成逻辑尽快退出
    执行生命周期过长
    不利于GC优化
    Septembers
    Septembers
    Apr 2, 2015 via Android
    26
    修正 单出口 我是指function内只有一个return
    blue7wings
    blue7wings
    Apr 2, 2015
    27
    我还是比较倾向于第一个的,但是如果有多个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的意思了...
    iyangyuan
    iyangyuan
    Apr 2, 2015
    28
    虽然单出口是原则,但我还是觉得有时候用return 可以使代码很简洁易读,读者不必读完整个代码段。尤其是在做参数合法性的时候。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1335 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 64ms · UTC 17:14 · PVG 01:14 · LAX 09:14 · JFK 12:14
    ♥ Do have faith in what you're doing.