閱讀陳皓博客代碼優(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