V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
OOLAOO
V2EX  ›  问与答

你们喜欢以下那种 return 方式

  •  
  •   OOLAOO · 2022-07-15 18:55:01 +08:00 · 2924 次点击
    这是一个创建于 862 天前的主题,其中的信息可能已经有所发展或是发生改变。

    第一种

    if(xxx){
      return xxxx;
    }else{
      return xxxx;
    }
    

    第二种

     xxx response;
    if(xxx){
    	response = xxxx;
    }
    else{
    	response = xxxx;
    }
    return response
    
    33 条回复    2022-07-16 17:05:58 +08:00
    TWorldIsNButThis
        1
    TWorldIsNButThis  
       2022-07-15 18:56:51 +08:00 via iPhone
    我现在更喜欢三目或者 1
    有对称的美感
    zhlxsh
        2
    zhlxsh  
       2022-07-15 18:57:26 +08:00 via iPhone
    我觉得没啥区别呀,习惯上的话第一种,少起一个变量名。
    tulongtou
        3
    tulongtou  
       2022-07-15 18:59:10 +08:00
    第二种
    v23x
        4
    v23x  
       2022-07-15 19:00:00 +08:00
    混着用

    看情况把
    dem0ns
        5
    dem0ns  
       2022-07-15 19:00:07 +08:00
    保险起见 if 里外都用 return
    secsilm
        6
    secsilm  
       2022-07-15 19:04:27 +08:00 via Android
    按照早返回的话第一种,但是如果逻辑真的这么简单的话就看心情吧。逻辑复杂就最好第一种,对读代码的人有帮助。
    netnr
        7
    netnr  
       2022-07-15 19:08:04 +08:00 via Android   ❤️ 3
    var res = 0;
    if(xxx){
    res = 1;
    }
    return res;
    golangLover
        8
    golangLover  
       2022-07-15 19:08:46 +08:00 via Android   ❤️ 1
    没有 else
    jtacm
        9
    jtacm  
       2022-07-15 19:13:56 +08:00   ❤️ 2
    第二种。
    原因:你的代码不只是你在维护,其他人也会来维护。为了避免后人在中途各种 return ,制造各种 surprise ,破坏代码可读性,建议用第二种,建立规范,最后返回。
    aptupdate
        10
    aptupdate  
       2022-07-15 19:23:32 +08:00 via iPhone
    一般简单的用第一种,如果有稍微复杂的逻辑会用第二种。
    IvanLi127
        11
    IvanLi127  
       2022-07-15 19:25:01 +08:00 via Android
    if(xxx){
    return xxxx;
    }
    return xxxx;
    }
    IvanLi127
        12
    IvanLi127  
       2022-07-15 19:26:29 +08:00 via Android
    if(xxx){
    return xxxx;
    }
    return xxxx;


    我一般这种。
    手机操作,前面不小心点到回复按钮发出去了。
    csh1617487191
        13
    csh1617487191  
       2022-07-15 19:35:03 +08:00
    if(xxx) return xxxx;
    return xxxx;
    mxT52CRuqR6o5
        14
    mxT52CRuqR6o5  
       2022-07-15 19:38:17 +08:00 via Android
    第一种,减少副作用逻辑降低心智负担
    Building
        15
    Building  
       2022-07-15 19:40:30 +08:00 via iPhone
    二元的话比较喜欢 return a ? { return b }() : { return c }()
    说的就是 go 这种二元表达式都不提供的语言
    wccc
        16
    wccc  
       2022-07-15 21:20:32 +08:00 via iPhone
    第一种
    dqzcwxb
        17
    dqzcwxb  
       2022-07-15 21:25:23 +08:00
    简单的第一种,复杂或者需要扩展维护的第二种
    tcp
        18
    tcp  
       2022-07-15 23:02:00 +08:00 via Android
    复杂情况下,如果第 2 种 if else 之后还有运算,可能会出错,第 1 种及时 return ,避免后续潜伏 bug 。多个选择分支情况下尤其可能出问题。
    myxingkong
        19
    myxingkong  
       2022-07-15 23:08:31 +08:00
    能用三目的话用三目,不能的话看函数复杂度,不复杂 1 ,复杂 2 。
    Jooooooooo
        20
    Jooooooooo  
       2022-07-15 23:24:54 +08:00
    第一种的尴尬之处是, return 的地方是死的, 一旦后续想改动很麻烦.

    经验告诉我第二种更好.
    Cabana
        21
    Cabana  
       2022-07-16 00:04:46 +08:00
    喜欢这样🐶 return if(xxx) xxx else xxx
    PMR
        22
    PMR  
       2022-07-16 00:21:37 +08:00 via Android
    if(xxx){
    aaa()
    }else{
    bbb()
    }

    aaa() {
    return xxx;
    }
    bbb() {
    return xxx;
    }

    :doge:
    SirCarol
        23
    SirCarol  
       2022-07-16 08:08:50 +08:00 via iPhone
    andyJado
        24
    andyJado  
       2022-07-16 09:38:21 +08:00
    现在 cpu 都有分支预测, 第一种预测失败导致的回滚应该会更严重一些.

    所以, 能用 guard 用 guard, 能 pattern match 就 match, 不写 if eles 之后代码读起来舒服多了..

    https://gitpress.io/u/1799/hardware_zh
    FYFX
        25
    FYFX  
       2022-07-16 11:56:30 +08:00
    我一般优先第一种,不过在有 return 的情况下没必要写 else
    icyalala
        26
    icyalala  
       2022-07-16 13:24:57 +08:00   ❤️ 1
    主要看上下文风格。如果是第一种,我更倾向:
    if (xxx) return xxxx;
    if (yyy) return yyyy;

    @andyJado 要相信编译器,这种开编译优化后一般没什么区别。
    chenyu8674
        27
    chenyu8674  
       2022-07-16 14:05:24 +08:00
    return x ? y : z;

    [doge]
    wxw752
        28
    wxw752  
       2022-07-16 14:05:29 +08:00
    想起来哪种用哪种
    gongquanlin
        29
    gongquanlin  
       2022-07-16 14:12:22 +08:00
    if(xxx){
    return xxx;
    }

    if(!xxx){
    return yyy;
    }

    习惯不用 else ,感觉 else 看起来别扭

    最主要的原因还是见识过公司领导的超级无敌大 if...else...里面还嵌套着 n 个 if else ,相同功能代码在 if 和 else 里来回复制,实在是恶心够了,见着 else 就难受。除非特殊情况不会用。。
    lslqtz
        30
    lslqtz  
       2022-07-16 15:50:26 +08:00
    res = xxx;
    if (a) {
    res = yyy;
    }
    return yes;
    ligiggy
        31
    ligiggy  
       2022-07-16 15:57:34 +08:00
    第二种叫单出原则,受到很多老程序员的推崇,尤其是 c/c++,但是越来越多的书已经不强求第二种实现了,视具体情况而定。建议 OP 多看点代码优化的书。

    多说一句,很多人都不推崇 goto ,或者类似的写法,我也不喜欢, 但是很多编程语言的源码里,有挺多 goto 的,所以,视具体情况而定吧。
    ligiggy
        32
    ligiggy  
       2022-07-16 15:58:58 +08:00
    另外,还有很多人喜欢
    if()
    {
    }
    不喜欢
    if(){
    }

    你可以有喜欢的代码方式,但是成熟的开发者,都需要习惯两种写法。
    MrVito
        33
    MrVito  
       2022-07-16 17:05:58 +08:00
    @ligiggy 不同的风格用各种 lint 工具来规范就好了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   913 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:39 · PVG 05:39 · LAX 13:39 · JFK 16:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.