代码优雅写法之逆向逻辑

海街日记.jpg

扯淡

好的代码 更多的也是为了后期维护,哪怕后期不需要你来维护 ,清晰干爽的代码也会为作者留下好的印象

并且 在工作团队中 可以施加影响力

用逆向逻辑 消灭嵌套

业务场景

乘坐飞机时需要 时间在起飞之前领取登机牌安检 最后 天气事宜飞行 的情况下 才能乘坐飞机起飞

时间在起飞时间后----> 改签

未领取登机牌 ----->在飞机起飞前 领取登机牌

未安检 ---->在 飞机起飞前 安检

天气事宜飞行 ---> 飞行

天气不宜飞行 ---> 改签

代码实现 之 瀑布流

    if(currentTime() < airplane.startTime() ){
          //时间在有效范围内
        if(boardingPass(user)){
                //拥有登机牌
                if(securityCheck(user)){
                       //安检完成
                        if(haveAGoodDay()){
                                return  //起飞
                          }else{
                               return   //改签
                          }
                  }else{
                       return  //进行安检
                  }
        }else{
               return    //领取登机牌
        }
    }else{
          return   //改签
    }

    看见这样的代码 不知道是否有兴趣在读下去
    这样的代码给人一种逻辑不清晰的感觉 虽然逻辑上确实没问题
复制代码

代码优雅写法之封装

将业务信息封装下,逻辑不混乱

代码实现之逆向逻辑

  if(currentTime() > airplane.startTime()){
        return   //改签
  }

  if(!haveAGoodDay()){
        return  //改签
   }

  if(!boardingPass(user)){
        return    //领取登机牌
   }

  if(securityCheck(user)){
        return   //安检
   }
   
  return  //起飞
  
  用逆向思维消灭层层嵌套
  代码中出现多次嵌套时:
  1. 逻辑不清晰
  2. 逻辑清晰但未将其视为一个业务整体,按照思维栈的思考编码
  3. 多层嵌套容易出现问题  
复制代码

总结

多重或与并非的条件下达成的目的业务 不妨尝试下逆向逻辑

时刻警惕思维栈编码逻辑,优先将其考虑为一个整体

多重嵌套是有问题的代码

猜你喜欢

转载自juejin.im/post/5d4d879d518825237b5bdc34