• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hao1032
V2EX  ›  程序员

函数中 if 是直接返回好,还是包起来好? 不知如何描述,进来看看吧。

  •  
  •   hao1032 · Sep 8, 2017 · 6201 views
    This topic created in 3344 days ago, the information mentioned may be changed or developed.
    以下 2 种方式,哪种更好呢?

    Supplement 1  ·  Sep 9, 2017
    看了各位的选择,很一致。感谢,以后不用纠结了。
    42 replies  •  2017-09-10 19:48:02 +08:00
    HongJay
    HongJay
    Sep 8, 2017
    1
    return 的 do something 不知行了吧
    lowzoom
    lowzoom
    Sep 8, 2017
    2
    必须下面的好
    EPr2hh6LADQWqRVH
    EPr2hh6LADQWqRVH
    Sep 8, 2017
    3
    if error then throw up
    yulitian888
    yulitian888
    Sep 8, 2017
    4
    这个问题最大的问题,难道不是“不知如何描述”吗?

    没点进来之前,看标题还以为是这样的情况:

    var result ;
    if(condition)
    {
    resdult =xxx;
    }
    else
    {
    result = yyy;
    }
    return result;

    -------------------------------

    if(condition)
    {
    return xxx;
    }
    else
    {
    return yyy;
    }

    -----------------------------------------
    好吧,答题主,第二种好
    xiaoc19
    xiaoc19
    Sep 8, 2017 via iPhone
    5
    第二种,swift 可以使用 guard else 的方式
    orderc
    orderc
    Sep 8, 2017
    6
    第二种, 错误提前返回
    zhenjiachen
    zhenjiachen
    Sep 8, 2017
    7
    我写 golang 好多地方都是第二种。
    Vindroid
    Vindroid
    Sep 8, 2017
    8
    第二种,第一种 if 里一大段,看着别扭
    flyingghost
    flyingghost
    Sep 8, 2017❤️1
    9
    第二种。
    函数头部先把参数异常、外部环境异常、内部状态异常等所有非法异常统统处理完。
    接下来安安静静的专心处理函数本身的主体逻辑。

    虽然看起来有点丑,但实用,清晰。
    owenliang
    owenliang
    Sep 8, 2017
    10
    我就想问,重要吗。。
    Cbdy
    Cbdy
    Sep 8, 2017
    11
    go 语言已经给你答案了:先写能提前返回的
    willvvvv
    willvvvv
    Sep 8, 2017
    12
    第二种优先,称之为卫语句

    当出现嵌套判定时,方便梳理逻辑。
    jlsk
    jlsk
    Sep 8, 2017
    13
    我一直觉得第一种好,因为这样可以少打几个字符
    ceflib
    ceflib
    Sep 8, 2017
    14
    《重构 改善既有代码的设计》有讲
    AlisaDestiny
    AlisaDestiny
    Sep 8, 2017
    15
    第二种,嵌套可以少一层。
    xiahei
    xiahei
    Sep 8, 2017
    16
    第二种,early return,一切为了可读性。
    keenwon
    keenwon
    Sep 8, 2017
    17
    明显第二种
    flowfire
    flowfire
    Sep 8, 2017 via Android
    18
    明显卫语句减少嵌套比较好吧
    而且一般卫语句 if 后面推荐不带括号
    momocraft
    momocraft
    Sep 8, 2017
    19
    第一个在你写了很多条件后会变成▶,不 scalable。

    第二个就一直是■,只是长一些。
    lzjV2EX
    lzjV2EX
    Sep 8, 2017
    20
    第二种好
    simon7
    simon7
    Sep 8, 2017 via iPad
    21
    第二种好 第一种会变成 if 嵌套的
    kn007
    kn007
    Sep 8, 2017
    22
    必须第二种
    kn007
    kn007
    Sep 8, 2017
    23
    任何语言,都建议函数先写能返回的。
    ChiangDi
    ChiangDi
    Sep 8, 2017 via iPhone
    24
    学习了
    autoxbc
    autoxbc
    Sep 8, 2017
    25
    就这个例子来说,第一种显然更好

    既不用否命题判断(反直觉),也不用多写一个返回操作(啰嗦)
    iugo
    iugo
    Sep 8, 2017
    26
    我觉得要看 do something 和其他代码的对比.

    如果 do something 是本函数的核心, 那就第二种. 可如果不是呢. 如果 something 只是所有事情中的一部分, 那就另说了.
    happywowwow
    happywowwow
    Sep 8, 2017
    27
    https://coolshell.cn/articles/17757.html
    <如何重构“箭头型”代码>
    iyangyuan
    iyangyuan
    Sep 8, 2017 via iPhone
    28
    异常则中断,规避嵌套,提高可读性,方便扩展
    danielmiao
    danielmiao
    Sep 8, 2017
    29
    第二种,但是不返回,抛异常,或者用 block 语句包围。
    直接返回容易造成调试困难,根本不知道程序从哪个位置退出
    ypcs03
    ypcs03
    Sep 9, 2017 via Android
    30
    必须下面的好,你可以省一个 else
    hao1032
    hao1032
    OP
    Sep 9, 2017 via Android
    31
    @all,学习了,看来不用纠结了,感谢各位。
    misaka20038numbe
    misaka20038numbe
    Sep 9, 2017
    32
    一般是第二种,不过还是要看实际情况。
    mornlight
    mornlight
    Sep 9, 2017
    33
    提早、多用 return,边界清楚。否则以后看代码的时候一堆 else 很容易晕掉。
    kaifeii
    kaifeii
    Sep 9, 2017
    34
    第一种和第二种编译结果应该是一样的,对执行没有影响。
    这个选择只是对可读性的择优。
    AvenirX
    AvenirX
    Sep 9, 2017 via iPhone
    35
    昨天刚刚看到的文章,里面有例子 你可以看看。

    https://mp.weixin.qq.com/s/i5aApAChmqgdxGH4fVu1mA
    RorschachZZZ
    RorschachZZZ
    Sep 9, 2017
    36
    第二种。
    honeycomb
    honeycomb
    Sep 9, 2017 via Android
    37
    @flyingghost 前面先把各种可以或需要排除的问题 guard
    zhx1991
    zhx1991
    Sep 9, 2017
    38
    第二种好

    金字塔式的 if 嵌套让人看的绝望
    RLib
    RLib
    Sep 10, 2017
    39
    那要看你 if 体有多大, 如果就一两句, 无所谓
    liuminghao233
    liuminghao233
    Sep 10, 2017
    40
    肯定第二种
    Sapp
    Sapp
    Sep 10, 2017
    41
    我是喜欢下面的,包括不用 else。
    introom
    introom
    Sep 10, 2017 via Android
    42
    如果第二种实际上后面执行的很短,我坚决第一种。否则第二种。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1314 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 86ms · UTC 19:53 · PVG 03:53 · LAX 11:53 · JFK 14:53
    ♥ Do have faith in what you're doing.