fliar
V2EX  ›  PHP

else 和 return,你喜歡哪種?

  •  
  •   fliar · Apr 1, 2015 · 5868 views
    This topic created in 4074 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
        1
    cnhongwei  
       Apr 1, 2015
    程序当然只有一个出口好。
    yangqi
        2
    yangqi  
       Apr 1, 2015
    两个逻辑关系完全不一样的,严格讲当然是if else更加严谨,而且也更加容易明白
    Phariel
        3
    Phariel  
       Apr 1, 2015
    多入口单出口,准则。
    zhujinliang
        4
    zhujinliang  
       Apr 1, 2015
    带else的好,这个操作跟return没大关系,return可能会对理解有些干扰,再者保不齐之后要加点别的操作呢。。

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

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

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

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