逆向思考,優(yōu)化/重構(gòu)你的代碼邏輯

閱讀陳皓博客代碼優(yōu)化, 寫了此篇文章,多層if else值得深思,至少現(xiàn)在我已經(jīng)在優(yōu)化多層if情況了.

函數(shù)中多層if else情況

if else是幾乎所有語言都有的一個(gè)語法, 也是我們最常用的語法. 我們先看一個(gè)偽代碼邏輯的判斷

只有滿足了A條件, A才做一些事情, 然后判斷, 是否滿足B條件, 滿足了做一個(gè)事情, 不滿足做另一件事情, 而且滿足了B條件后, 要看C條件, C條件滿足了做一些事情, 不滿足做另一件事情.

此時(shí)我們會(huì)寫出如下的代碼.

  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;
          }
      }
  }

當(dāng)后人看到這份代碼的時(shí)候, 是不是會(huì)一團(tuán)霧水, 且感覺邏輯復(fù)雜, 第一反應(yīng)是上一個(gè)人寫的什么**代碼, 因?yàn)樗麄兪遣恢牢覀兩厦娴倪壿嫷? 后人得自己梳理邏輯.

若我們倒過來看上面的邏輯, 即會(huì)寫出不一樣的代碼.

A要滿足條件才去做事情, 而實(shí)際上不滿足什么事情也不做. B也是, 要在A滿足的情況下才做事,So. 先把上面的代碼優(yōu)化后的代碼貼出來.

  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;
      }
  }

仔細(xì)看看上面代碼,其實(shí)和之前的那個(gè)三層if判斷是一樣的效果. 只不過在這里. 不滿足A直接返回.與上面一樣. 滿足了, A做些事情, 判斷B, 不滿足B條件的話, B做其他事情, 滿足了, B做些事情 再去進(jìn)行C的判斷.

這么看下來.我們的代碼好像變得簡潔很多, 也沒有多層if的情況出現(xiàn), 整個(gè)條件變成了"鏈?zhǔn)?.

循環(huán)中的多層if else

有人要說了,你上面是用return, 我這for循環(huán)里面的if else怎么辦呢, 那可不能return啊.

其實(shí)一樣,return只是打斷程序往下執(zhí)行的一種方式, 在循環(huán)里, 我們用continue+ break即可.

總結(jié)

通過上面判斷不滿足條件的模式, 而不是滿足條件的模式, 代碼變的簡潔多了. 日常工作中, 當(dāng)我們一不小心寫出多層if else的代碼時(shí), 一定要記得回頭看一下, 考慮一下能不能優(yōu)化一下判斷模式, 以另一種角度來看這些判斷.

祝各位的代碼閱讀起來如流水般順暢.


本文作者:Anderson/Jerey_Jobs

博客地址 : http://jerey.cn/

簡書地址 : Anderson大碼渣

github地址 : https://github.com/Jerey-Jobs

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,351評(píng)論 0 17
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評(píng)論 18 399
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,923評(píng)論 0 33
  • Part 1 :盒模型(box model) "every element in web design is a ...
    野味狼果閱讀 857評(píng)論 1 11
  • 寫于高中那個(gè)年代 期盼的元旦已經(jīng)過去了,還有什么理由再玩弄人生,這樣子,能夠考上一個(gè)好大學(xué)嗎?現(xiàn)在這種緊急時(shí)刻,我...
    木石木辛閱讀 193評(píng)論 0 1

友情鏈接更多精彩內(nèi)容