V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wleexi
V2EX  ›  程序员

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

  •  
  •   wleexi · 2019-02-26 14:04:56 +08:00 · 2883 次点击
    这是一个创建于 2099 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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   ·   实用小工具   ·   3823 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 10:35 · PVG 18:35 · LAX 02:35 · JFK 05:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.