你有没有犯过这个错误

假如有一个业务需求是,如果业务分数大于80分 设置一个表示flag =1其他 为0 

你会不会这样写

方法一if(score> 100){

  setFlag =1

}else{

  setFlag =0

}

方法二你是不是也会这样写

  setFlag =0

if(score> 100){

  setFlag =1

}

你知道这两种有什么区别吗,方法二其实有很大的风险 假如方法二 后边有逻辑 比如,或者 中间有什么其他业务代码,

  setFlag =0

try {
    //其他业务代码,

if(score> 100){

//其他业务代码,比如查询数据库

  setFlag =1

}

}catch (){ }

这些代码如果报错,那么Flag 这个字段必然 会被赋值为0 假如这个这个人的分数 大于100应该等于1,那么会破坏整体的业务逻辑。

这就是方法一的好处 ,如果出问题将不会有值,

接下来我们在看一下变形

假如 这样 ,你接到一个需求 说 测试组同学大于100分的设置为1 其他为0 或者 不传,产品随手一写你随手一听,你会这样做

if(score> 100&&name =测试组){

  setFlag =1

}else{

  setFlag =0

}

如果没有特别说明你应该这样做

if(name =测试组){

if(score> 100){

  setFlag =1
}else{

  setFlag =0
}

这样做的目的,第一留出一种情况 也就是setFlag 不传的情况,这样第一你能知道 程序报错的逻辑。第二你整体上规避了 非测试组 也能拿到值的情况。

我举个现实中的例子,幼儿园有大班小班,小朋友分苹果,说给大班女生分一个梨 ,其他分苹果,这样就避免了,小班也能拿到苹果的情况,

注意业务开发准则就是:缩范围保安全。