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

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

函數(shù)中多層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;
          }
      }
  }

當后人看到這份代碼的時候, 是不是會一團霧水, 且感覺邏輯復(fù)雜, 第一反應(yīng)是上一個人寫的什么**代碼, 因為他們是不知道我們上面的邏輯的, 后人得自己梳理邏輯.

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

A要滿足條件才去做事情, 而實際上不滿足什么事情也不做. 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;
      }
  }

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

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

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

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

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

總結(jié)

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

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


本文作者:Anderson/Jerey_Jobs

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

簡書地址 : Anderson大碼渣

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市香罐,隨后出現(xiàn)的幾起案子获搏,更是在濱河造成了極大的恐慌譬圣,老刑警劉巖描函,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聂抢,死亡現(xiàn)場離奇詭異冯凹,居然都是意外死亡龟劲,警方通過查閱死者的電腦和手機观话,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門予借,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人频蛔,你說我怎么就攤上這事灵迫。” “怎么了晦溪?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵瀑粥,是天一觀的道長。 經(jīng)常有香客問我三圆,道長狞换,這世上最難降的妖魔是什么避咆? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮修噪,結(jié)果婚禮上查库,老公的妹妹穿的比我還像新娘。我一直安慰自己黄琼,他們只是感情好樊销,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脏款,像睡著了一般围苫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撤师,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天够吩,我揣著相機與錄音,去河邊找鬼丈氓。 笑死周循,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的万俗。 我是一名探鬼主播湾笛,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闰歪!你這毒婦竟也來了嚎研?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤库倘,失蹤者是張志新(化名)和其女友劉穎临扮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體教翩,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡杆勇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了饱亿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚜退。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖彪笼,靈堂內(nèi)的尸體忽然破棺而出钻注,到底是詐尸還是另有隱情,我是刑警寧澤配猫,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布幅恋,位于F島的核電站,受9級特大地震影響泵肄,放射性物質(zhì)發(fā)生泄漏捆交。R本人自食惡果不足惜淑翼,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望零渐。 院中可真熱鬧窒舟,春花似錦、人聲如沸诵盼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽风宁。三九已至洁墙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間戒财,已是汗流浹背热监。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饮寞,地道東北人孝扛。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像幽崩,于是被迫代替她去往敵國和親苦始。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

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