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

》关于代码中按条件返回布尔值怎样写更好这件事《

  •  
  •   wednesdayco · 2021-12-04 15:00:50 +08:00 · 2549 次点击
    这是一个创建于 1085 天前的主题,其中的信息可能已经有所发展或是发生改变。

    carbon 1.png

    carbon 2.png

    V2 的老哥们倾向哪种写法?

    29 条回复    2021-12-05 13:40:57 +08:00
    Jooooooooo
        1
    Jooooooooo  
       2021-12-04 15:05:49 +08:00
    if else 最朴素的写法呀, 清晰永远都是第一要务.

    后面改这块逻辑的人很可能还是你自己.
    autoxbc
        2
    autoxbc  
       2021-12-04 15:29:14 +08:00
    () => {
      switch(true)
     {
       case exp1 :
       case exp2 :
       case exp3 :
        return false ;
     }

      return true ;
    };

    这是我觉得最工整的写法
    Building
        3
    Building  
       2021-12-04 15:30:54 +08:00 via iPhone
    guard … else {
    return
    }

    guard … else {
    return
    }

    ……

    return true
    binux
        4
    binux  
       2021-12-04 15:34:24 +08:00 via Android
    你为什么要写或,写与条件不是更清晰吗?
    cmdOptionKana
        5
    cmdOptionKana  
       2021-12-04 15:45:02 +08:00
    我选第二种,并且会加注释。第二种也更容易加注释。
    noe132
        6
    noe132  
       2021-12-04 15:49:54 +08:00
    MrGba2z
        7
    MrGba2z  
       2021-12-04 15:57:07 +08:00
    我个人的话:把第一个的 if 改成真值 > 第二个 > 第一个
    wednesdayco
        8
    wednesdayco  
    OP
       2021-12-04 16:04:50 +08:00
    @cmdOptionKana 感觉不是更方便注释,而是条件下有新增逻辑需求的时候不用拆条件。
    cmdOptionKana
        9
    cmdOptionKana  
       2021-12-04 16:26:36 +08:00
    @wednesdayco 注释也很重要啊,第一种,以及 #6 @noe132 给出的写法,注释要怎么写,很难描述。

    如果发现用人类语言很难描述,通常就可能有问题,而第二种很好描述 “如果审批不 OK ,就不用看别的因素,必然是个无效价格”……如此这般,每一个判断都非常清晰。
    ZE3kr
        10
    ZE3kr  
       2021-12-04 17:27:34 +08:00 via iPhone   ❤️ 1
    return !(item.approvalStatus!==
    STATUS.OK ||
    item.isEffective Il
    (moment(orderTime)
    <= moment(item.endTime) && moment(orderTime) ›= moment(item.startTime)))
    zxCoder
        11
    zxCoder  
       2021-12-04 18:29:34 +08:00
    我会选第二种,但是为什么不加花括号!!!!!!!!!!!!!
    ch2
        12
    ch2  
       2021-12-04 20:06:38 +08:00
    第二种可读性更好
    bwangel
        13
    bwangel  
       2021-12-04 20:29:58 +08:00
    第二种啊,第一种条件多了,容易写成箭头型代码。

    五六层缩进,不好看
    cpstar
        14
    cpstar  
       2021-12-04 20:32:46 +08:00
    def rtn = true;
    if rtn=...
    else if rtn=...
    else if rtn=...
    else rtn=...
    return rtn

    哈哈
    Innovatino
        15
    Innovatino  
       2021-12-04 20:44:24 +08:00 via iPhone
    我觉得第二种更好。
    但是我觉得把需求写在方法上面,把注释写在条件上面是更好的实践。
    kaiki
        16
    kaiki  
       2021-12-04 22:33:47 +08:00
    我经常 return (xxx) ? true : false;
    想着反正以后不会再去维护这块了
    newtype0092
        17
    newtype0092  
       2021-12-04 22:53:48 +08:00
    @noe132 这种为形式而形式了吧,本来一个条件就可以中断了,没必要把所有条件都算完。
    非要追求这样的格式的话也应该分别包到闭包里。
    newtype0092
        18
    newtype0092  
       2021-12-04 22:57:07 +08:00
    第二种是合理的,条件多的时候按类型分开,可以确定 return 的提前 return 出去,这样后面条件越来越简单越来越清晰。
    第一种一个条件连一大串,看得眼睛花了都。


    if body 要加大括号 要加大括号 要加大括号
    ZE3kr
        19
    ZE3kr  
       2021-12-04 23:11:45 +08:00 via iPhone
    @kaiki 你这直接 return xxx 就行了
    kaiki
        20
    kaiki  
       2021-12-04 23:13:02 +08:00
    @ZE3kr 差不多,只是我喜欢用:?缩写,能直接返回布尔值也没必要专门搞一道
    WilliamYang
        21
    WilliamYang  
       2021-12-05 01:53:18 +08:00
    可以看下《代码整洁之道》
    binux
        22
    binux  
       2021-12-05 02:02:56 +08:00 via Android
    return item.approvalStatus==
    STATUS.OK &&
    !item.isEffective && !
    moment(orderTime).isBetween(item.startTime, item.endTime)
    hm20062006ok
        23
    hm20062006ok  
       2021-12-05 09:34:17 +08:00 via iPhone
    写两个叹号是啥意思?
    chairuosen
        24
    chairuosen  
       2021-12-05 11:54:41 +08:00
    写代码给人看是第一要素,不建议 10 楼写法
    rosu
        25
    rosu  
       2021-12-05 11:59:55 +08:00   ❤️ 1
    一般第二种多点,不过关于你这个特例,其实可以更简洁:

    noparking188
        26
    noparking188  
       2021-12-05 12:13:26 +08:00
    @rosu #25 #25 投一票哈哈,干脆进一步
    private/public
    item.isApproved
    item.isVaildOrderTime

    记得《重构》里有讲这个
    rosu
        27
    rosu  
       2021-12-05 12:22:11 +08:00 via iPhone
    @noparking188 理论上都可以收拢到 item 对象里的,约束和复用程度更好~
    huijiewei
        28
    huijiewei  
       2021-12-05 12:57:15 +08:00
    一句话

    尽早返回
    munan56
        29
    munan56  
       2021-12-05 13:40:57 +08:00
    第二种啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1998 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:50 · PVG 08:50 · LAX 16:50 · JFK 19:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.