方法返回值为多个 bool 值做&& 有简化方法嘛 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
wleexi
V2EX    程序员

方法返回值为多个 bool 值做&& 有简化方法嘛

  •  
  •   wleexi 2019-02-26 14:04:56 +08:00 3289 次点击
    这是一个创建于 2486 天前的主题,其中的信息可能已经有所发展或是发生改变。
    boolean foo() { boolean rseultA = funca(); boolean resultB = funcB(); boolean resultC = funcC(); return !rseultA && !resultB && !resultC; } 

    最后的 return 有更好的做法吗

    20 条回复    2019-02-26 20:42:17 +08:00
    ChoateYao
        1
    ChoateYao  
       2019-02-26 14:08:51 +08:00
    return !(funca() || funcb() || funcc())
    cxl008
        2
    cxl008  
       2019-02-26 14:13:21 +08:00
    8421 ... 4 个值 你还可以再加一个返回。。用一个 byte
    wleexi
        3
    wleexi  
    OP
       2019-02-26 14:16:23 +08:00
    @ChoateYao 额这个是我没写全。 完整的时候是
    boolean rseultA = funca();
    if (resultA) {
    log.info(XXXX)
    }
    EscYezi
        4
    EscYezi  
       2019-02-26 14:18:13 +08:00 via iPhone
    一楼正解
    wutiantong
        5
    wutiantong  
       2019-02-26 16:02:04 +08:00
    果然前几天那个《代码 if 嵌套过多,怎么优化比较好》也是你问的。看得我真是莫名其妙啊。
    wleexi
        6
    wleexi  
    OP
       2019-02-26 16:19:48 +08:00
    @wutiantong 是我问的。最近学习中 很多疑问还望大佬多指点
    TimFire
        7
    TimFire  
       2019-02-26 16:20:35 +08:00
    我有强迫症。。。rseultA....
    CodeCore
        8
    CodeCore  
       2019-02-26 16:23:08 +08:00   1
    就这样挺好的. 简单易懂. 不要搞那么复杂难懂.
    mrgeneral
        9
    mrgeneral  
       2019-02-26 16:23:54 +08:00
    reduce 就好了
    geelaw
        10
    geelaw  
       2019-02-26 16:32:38 +08:00 via iPhone
    @ChoateYao #1 短路会改变业务逻辑
    wutiantong
        11
    wutiantong  
       2019-02-26 16:36:16 +08:00
    @wleexi 可能是我太菜,我看不懂你想问什么,比如说,原来的做法哪里不好呢?
    hitmanx
        12
    hitmanx  
       2019-02-26 16:38:02 +08:00
    @wleexi 除了简化还要考虑 debug 的便利性,尤其是设断点的可能性。像 1L 这样的,哪怕不涉及到短路影响业务逻辑,对于 debug 的友好型也是远远不如你目前这种写法:
    boolean rseultA = funca();
    if (resultA) {
    log.info(XXXX)
    }
    ChoateYao
        13
    ChoateYao  
       2019-02-26 16:55:52 +08:00
    @geelaw 是的,但是他只给这么一段代码,要我们回答者自己去猜,我们没有这么多精力吧。
    liuxingbaoyu
        14
    liuxingbaoyu  
       2019-02-26 18:15:59 +08:00
    我都是
    bool a=func1();
    a=a&&func2();
    a=a&&func3();
    liuxingbaoyu
        15
    liuxingbaoyu  
       2019-02-26 18:17:16 +08:00
    @liuxingbaoyu
    改成
    a=func2() && a;
    吧...
    刚才搞错了...
    frienmo
        16
    frienmo  
       2019-02-26 18:23:59 +08:00
    写 Java,就写得简单点,易读最重要,毕竟是工业化产品,会有很多比你水平低的人接手代码的。
    GuuJiang
        17
    GuuJiang  
       2019-02-26 18:24:17 +08:00
    能否接受短路,如果能接受的话就很简单
    ```
    boolean foo() {
    if (funcA()) {
    return false;
    }
    if (funcB()) {
    return false;
    }
    if (funcC()) {
    return false;
    }

    return true;
    }
    ```
    wleexi
        18
    wleexi  
    OP
       2019-02-26 19:35:59 +08:00
    @wutiantong 恩你说的是。我现在说不好也就是我感觉上不太好,但是具体哪里欠妥你让我说个一二三我未必说的出来。刚开始重视代码风格这块东西,自己的能力和书上的概念不一定能很好的契合吧,感谢你
    bakabie
        19
    bakabie  
       2019-02-26 20:26:17 +08:00   1
    1l 正解,不过有时候并不需要过于纠结 if 多少的问题,有时候 if 虽然多点,但是还是能直观表达代码的。。
    lululau
        20
    lululau  
       2019-02-26 20:42:17 +08:00 via iPhone   1
    return all_falsy(resultA, resultB, ...)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3022 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 13:30 PVG 21:30 LAX 05:30 JFK 08:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86