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

2017-03-28 19:44:20 +08:00
 TIGERB

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

就这样~

3293 次点击
所在节点    程序员
18 条回复
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;
}
mokeyjay
2017-03-28 20:34:54 +08:00
直接把 return false 替换为抛出错误然后外部捕捉统一返回不是更好吗?
cdwyd
2017-03-28 20:36:43 +08:00
直接 return false 更容易理解。
bk201
2017-03-28 20:37:05 +08:00
@mokeyjay return false 不代表异常啊
xialdj
2017-03-28 20:55:11 +08:00
@WenhaoWu 我喜欢前一种 代码清晰 条件分拆清楚
laball
2017-03-28 21:23:06 +08:00
这个时候,就是体现代码重构的功底了!
linbiaye
2017-03-28 21:24:29 +08:00
求看看代码张什么样啊
greatbody
2017-03-28 22:18:06 +08:00
建议写一个函数,将所有需要验证的逻辑作为参数数组传给这个函数。
比如:
验证器([
()=>{验证逻辑 1},
()=>{验证逻辑 2},
()=>{验证逻辑 3}])

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

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

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

然后,最后 return *_ERROR ;

这样观察返回值,就知道哪里错了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/350989

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX