逆向思考,优化/重构你的代码逻辑

Posted by 夏敏的博客 on May 18, 2017

阅读陈皓博客代码优化, 写了此篇文章,多层if else值得深思,至少现在我已经在优化多层if情况了.

函数中多层if else情况

if else是几乎所有语言都有的一个语法, 也是我们最常用的语法. 我们先看一个伪代码逻辑的判断

只有满足了A条件, A才做一些事情, 然后判断, 是否满足B条件, 满足了做一个事情, 不满足做另一件事情, 而且满足了B条件后, 要看C条件, C条件满足了做一些事情, 不满足做另一件事情.

此时我们会写出如下的代码.

  private void quitNlu() {
      if (A条件) {
          A do something;
          if (B条件) {
              B do something;
              if (C条件) {
                  C do something;
              } else {
                  C do another thing;
              }
          } else {
              B do another thing;
          }
      }
  }

当后人看到这份代码的时候, 是不是会一团雾水, 且感觉逻辑复杂, 第一反应是上一个人写的什么**代码, 因为他们是不知道我们上面的逻辑的, 后人得自己梳理逻辑.

若我们倒过来看上面的逻辑, 即会写出不一样的代码.

A要满足条件才去做事情, 而实际上不满足什么事情也不做. B也是, 要在A满足的情况下才做事,So. 先把上面的代码优化后的代码贴出来.

  private void quitNlu() {
      if (!A条件) {                
          return;
      }
      A do something;
      if (!B条件) {
          B do another thing;
          return
      }
      B do something;
      if (C条件) {
          C do something;
      } else {
          C do another thing;
      }
  }

仔细看看上面代码,其实和之前的那个三层if判断是一样的效果. 只不过在这里. 不满足A直接返回.与上面一样. 满足了, A做些事情, 判断B, 不满足B条件的话, B做其他事情, 满足了, B做些事情 再去进行C的判断.

这么看下来.我们的代码好像变得简洁很多, 也没有多层if的情况出现, 整个条件变成了”链式”.

循环中的多层if else

有人要说了,你上面是用return, 我这for循环里面的if else怎么办呢, 那可不能return啊.

其实一样,return只是打断程序往下执行的一种方式, 在循环里, 我们用continue+ break即可.

总结

通过上面判断不满足条件的模式, 而不是满足条件的模式, 代码变的简洁多了. 日常工作中, 当我们一不小心写出多层if else的代码时, 一定要记得回头看一下, 考虑一下能不能优化一下判断模式, 以另一种角度来看这些判断.

祝各位的代码阅读起来如流水般顺畅.


本文作者:Anderson/Jerey_Jobs

博客地址 : http://jerey.cn/
简书地址 : Anderson大码渣
github地址 : https://github.com/Jerey-Jobs

作者:Anderson大码渣,欢迎关注我的简书: Anderson大码渣