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

在一堆业务逻辑无限 return false 的代码里查 bug,真的很蛋疼。。。

  •  
  •   TIGERB ·
    TIGERB · Mar 28, 2017 · 4310 views
    This topic created in 3508 days ago, the information mentioned may be changed or developed.

    在一堆业务逻辑无限 return false 的代码里查 bug,真的很蛋疼。。。

    就这样~

    18 replies  •  2017-03-29 11:12:55 +08:00
    WenhaoWu
    WenhaoWu
    Mar 28, 2017
    1
    if(dataNotValid(data)){
    notValid();
    return false;
    }

    if(dataNotMatch(data)){
    notMatch();
    return false;
    }

    handleData(data);
    return true;

    vs

    if(!dataNotValid(data)){
    if (!dataNotMatch(data)){
    handleData(data);
    return true;
    }
    else {
    notMatch();
    return false;
    }
    }
    else{
    notValid();
    return false;
    }
    mokeyjay
    mokeyjay
    Mar 28, 2017 via Android
    2
    直接把 return false 替换为抛出错误然后外部捕捉统一返回不是更好吗?
    cdwyd
    cdwyd
    Mar 28, 2017
    3
    直接 return false 更容易理解。
    bk201
    bk201
    Mar 28, 2017 via iPhone
    4
    @mokeyjay return false 不代表异常啊
    xialdj
    xialdj
    Mar 28, 2017 via iPhone
    5
    @WenhaoWu 我喜欢前一种 代码清晰 条件分拆清楚
    laball
    laball
    Mar 28, 2017
    6
    这个时候,就是体现代码重构的功底了!
    linbiaye
    linbiaye
    Mar 28, 2017
    7
    求看看代码张什么样啊
    greatbody
    greatbody
    Mar 28, 2017
    8
    建议写一个函数,将所有需要验证的逻辑作为参数数组传给这个函数。
    比如:
    验证器([
    ()=>{验证逻辑 1},
    ()=>{验证逻辑 2},
    ()=>{验证逻辑 3}])

    验证器函数自己逐个调用这些函数,然后遇到一个 false 就直接 return 。

    这一朵朵奇葩一样嵌套的 if 判断也是够了。
    wc951
    wc951
    Mar 29, 2017 via Android
    9
    返回布尔型其实不是一个好的选择,分支多的情况下连哪出错都判断不了
    0915240
    0915240
    Mar 29, 2017 via iPhone
    10
    @mokeyjay 所以现在大多数情况下我喜欢 Preconditions
    TIGERB
    TIGERB
    OP
    Mar 29, 2017
    11
    @wc951 是啊,很蛋疼呢,哈哈
    guyskk
    guyskk
    Mar 29, 2017
    12
    这种情况就应该抛异常
    TIGERB
    TIGERB
    OP
    Mar 29, 2017
    13
    @mokeyjay 除了函数,使用异常是个明智的选择
    TIGERB
    TIGERB
    OP
    Mar 29, 2017
    14
    @laball 哈哈
    TIGERB
    TIGERB
    OP
    Mar 29, 2017
    15
    @linbiaye 不太方便,哈哈
    mokeyjay
    mokeyjay
    Mar 29, 2017
    16
    @bk201 #4 并不是真的要抛出异常,我说“统一捕捉返回”的意思就是 try{ ... } catch(e) { return false; }。抛出异常其实只是跳出业务逻辑的一种手段。后期如果需要扩展、让程序返回具体的异常类型时也比较方便
    annielong
    annielong
    Mar 29, 2017
    17
    就这个来看应该重写 dataNotValid ,返回错误代码,然后再根据错误代码输出
    ic2y
    ic2y
    Mar 29, 2017
    18
    应该改改,返回 0 表示正常,返回非零,表示异常。

    然后,在前面定义宏,
    MATCH _ERROR = 1;
    VAILD_ERROR = 2;
    等等,或者使用枚举。

    然后,最后 return *_ERROR ;

    这样观察返回值,就知道哪里错了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1514 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 18:15 · PVG 02:15 · LAX 10:15 · JFK 13:15
    ♥ Do have faith in what you're doing.