在一堆业务逻辑无限 return false 的代码里查 bug,真的很蛋疼。。。
就这样~
1
WenhaoWu 2017-03-28 20:31:42 +08:00
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; } |
2
mokeyjay 2017-03-28 20:34:54 +08:00 via Android
直接把 return false 替换为抛出错误然后外部捕捉统一返回不是更好吗?
|
3
cdwyd 2017-03-28 20:36:43 +08:00
直接 return false 更容易理解。
|
6
laball 2017-03-28 21:23:06 +08:00
这个时候,就是体现代码重构的功底了!
|
7
linbiaye 2017-03-28 21:24:29 +08:00
求看看代码张什么样啊
|
8
greatbody 2017-03-28 22:18:06 +08:00
建议写一个函数,将所有需要验证的逻辑作为参数数组传给这个函数。
比如: 验证器([ ()=>{验证逻辑 1}, ()=>{验证逻辑 2}, ()=>{验证逻辑 3}]) 验证器函数自己逐个调用这些函数,然后遇到一个 false 就直接 return 。 这一朵朵奇葩一样嵌套的 if 判断也是够了。 |
9
wc951 2017-03-29 08:49:55 +08:00 via Android
返回布尔型其实不是一个好的选择,分支多的情况下连哪出错都判断不了
|
12
guyskk 2017-03-29 10:17:59 +08:00
这种情况就应该抛异常
|
16
mokeyjay 2017-03-29 10:23:26 +08:00
@bk201 #4 并不是真的要抛出异常,我说“统一捕捉返回”的意思就是 try{ ... } catch(e) { return false; }。抛出异常其实只是跳出业务逻辑的一种手段。后期如果需要扩展、让程序返回具体的异常类型时也比较方便
|
17
annielong 2017-03-29 10:54:49 +08:00
就这个来看应该重写 dataNotValid ,返回错误代码,然后再根据错误代码输出
|
18
ic2y 2017-03-29 11:12:55 +08:00
应该改改,返回 0 表示正常,返回非零,表示异常。
然后,在前面定义宏, MATCH _ERROR = 1; VAILD_ERROR = 2; 等等,或者使用枚举。 然后,最后 return *_ERROR ; 这样观察返回值,就知道哪里错了 |