写通俗易懂代码-用卫语句替代嵌套条件表达式

白俊遥博客

当我们在写业务逻辑时候,不知不觉已经把代码嵌套了好几次:


if (true){
            if (true){
                if (true){
                    for (){
                        if (true){
                            业务代码
                        }
                    }
                }
            }
        }


        在有比较复杂的判断和需要遍历处理业务时候,经常会出现上面这种情况,这些代码在执行起来是没问题。但是这样的代码是一次性代码,过一段时间,可能自己都不敢动这里的逻辑了,更何况下一个接盘侠呢。


        这样的代码很难弄明白每个条件的作用和执行的流程,当你读到最里面一层的时候,估计你已经记不起来当初是为什么走进这个if的了,对代码的执行流程完全不可控了。因为执行你预期的流程并不明显,为了简化这种情况,需要将特殊情况隔离到立即结束执行的单独条件中。


这样就能把箭头代码给拉平: 


        if (false){
        }
        if (false){
        }
        if (false){
        }
        for (){
            if (false){
                continue;
            }
            业务代码
        }


        这是其中一类,可以将失败前置。只要有一个条件不通过,就快速返回失败,如果到了最后一行,说明所有判断都通过,剩下的就是你预期的结果。而不是一直查成功。


        在重构法则上,这种叫Guard Clause法则,卫语句。


        还有一种重构方式,就是将复杂的业务逻辑从if块中抽取为一个业务方法,即使这个方法只被使用一次。这种常常用在循环块中,或者多个if...else块中。


        开发中要深刻的理解到函数的作用,是代码的封装或者抽象。将复杂的业务逻辑进行封装抽象,让我们从业务接口解耦,不需要关注具体实现,从而简化我们的代码,使得复杂的业务逻辑读起来也有条不紊。


        在我们使用if...else...语句时,判断是否是错误的情况出现嵌套,可以是用guard clause语句,让失败前置。如果if过多,可能出现多个失败code导致客户端解析困难,我们可以将所有错误结果包装为一个异常状态即可。

老刘博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论
  • 老刘博客 laoliu.pro © 2018-2019 版权所有
  • 辽ICP备19003301号-1