重構(gòu)(八)重構(gòu)名錄-簡(jiǎn)化條件邏輯

分解條件表達(dá)式Decompose Conditional Expression
image.png
  • 動(dòng)機(jī):復(fù)雜的條件邏輯導(dǎo)致復(fù)雜度的上升。必須編寫(xiě)代碼來(lái)檢查不同的條件分支,根據(jù)不同的條件做不同的事,然后,很快就會(huì)得到一個(gè)相當(dāng)長(zhǎng)的函數(shù)。大型函數(shù)本書(shū)就會(huì)使代碼的可讀性下降,而條件邏輯則會(huì)使代碼更難閱讀。
  • 做法:對(duì)條件判斷和每個(gè)條件分支分別運(yùn)用提煉函數(shù)手法。
合并條件表達(dá)式 Consolidate Conditional Expression
image.png
  • 動(dòng)機(jī):有時(shí)我會(huì)發(fā)現(xiàn)這樣一串條件檢查:檢查條件各不相同,最終行為卻一致。如果發(fā)現(xiàn)這種情況,就應(yīng)該使用邏輯與邏輯或?qū)⑺鼈兒喜橐粋€(gè)條件表達(dá)式?!皩?shí)際上只有一次條件檢查,只不過(guò)有多個(gè)并列條件需要檢查而已”。而如果有多個(gè)條件,每個(gè)條件檢查后的結(jié)果不一樣,就不能合并而需要拆分了。
以衛(wèi)語(yǔ)句取代嵌套條件表達(dá)式Replace Nested Conditional with Guard Clauses
image.png

image.png
  • 衛(wèi)語(yǔ)句:在多個(gè)條件表達(dá)式中,如果某個(gè)條件及其罕見(jiàn),就應(yīng)該單獨(dú)檢查該條件,并在該條件為真時(shí)立刻從函數(shù)中返回。這樣的單獨(dú)檢查常常被稱為“衛(wèi)語(yǔ)句”。
  • 動(dòng)機(jī):衛(wèi)語(yǔ)句表示給某一條分支以特別的重視,如果它真的發(fā)生了,需要做一些必要的工作,然后退出。if else語(yǔ)句對(duì)分支的重視是相等的。
以多態(tài)取代條件表達(dá)式Replace Conditional with Polymorphism
image.png
  • 動(dòng)機(jī):復(fù)雜的條件邏輯是編程中最難理解的東西之一,很多時(shí)候,我發(fā)現(xiàn)可以將條件邏輯拆分到不同的場(chǎng)景,從而拆解復(fù)雜的條件邏輯。這種拆分有時(shí)用條件邏輯本身的結(jié)構(gòu)就足以表達(dá),但使用類和多態(tài)能把邏輯的拆分表述的更清晰。
  • 這里強(qiáng)調(diào)的是復(fù)雜邏輯,在實(shí)際開(kāi)發(fā)中,通常簡(jiǎn)單的ifelse 或switch就能解決大部分邏輯。
引入特例Introduce Special Case
image.png
  • 動(dòng)機(jī):一種常見(jiàn)的重復(fù)代碼是這種情況:一個(gè)數(shù)據(jù)結(jié)構(gòu)的使用者都在檢查某個(gè)特殊的值,并且當(dāng)這個(gè)特殊值出現(xiàn)時(shí)所作的處理也都相同。如果我發(fā)現(xiàn)代碼庫(kù)中有多處以同樣方式應(yīng)對(duì)同一個(gè)特殊值,我就會(huì)想到把這個(gè)處理邏輯收攏到一處。
  • 做法:使用“特例”模式:創(chuàng)建一個(gè)特例元素,用以表達(dá)對(duì)這種特例的共用行為的處理。這樣我就可以用一個(gè)函數(shù)調(diào)用取代大部分特例檢查邏輯。
  • 特例有幾種表現(xiàn)形式。如果我只需要從這個(gè)對(duì)象讀取數(shù)據(jù),可以提供一個(gè)字面量對(duì)象,其中所有的值都是預(yù)先填充好的。如果還需要更多行為,就需要?jiǎng)?chuàng)建一個(gè)特殊對(duì)象,其中包括所有共用行為所對(duì)應(yīng)的函數(shù)。特例對(duì)象可以由一個(gè)封裝類來(lái)返回。
引入斷言Introduce Assertion
image.png
  • 如果你發(fā)現(xiàn)代碼假設(shè)某個(gè)條件始終為真,就加入一個(gè)斷言明確說(shuō)明這種情況。
Replace Control Flag with Break
image.png
  • 動(dòng)機(jī)
最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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