摘要:這些場景,你是怎麼寫的代碼?
if-else,這是個再正常不過的coding習慣,當我們代碼量小的時候用來做條件判斷是再簡單不過的了。但對於優秀程序員來說,這卻不是好代碼。
不信你往下看…
1. 衛語句提前return
假設有如下代碼
通過對判斷條件取反,代碼在邏輯表達上會更加清晰
2. 使用Optional簡化if判空
2.1 簡化1級判空
假設有如下代碼
使用Optional後
2.2 簡化多級判空
假設有如下代碼
使用Optional後
對於沒有else的場景,使用ifPresent即可
3. 策略模式
假設有如下代碼:
這就是不要根據不同的參數類型走不同的代碼邏輯,這種場景很常見,他還會以switch-case的方式出現:
不同的代碼邏輯就代表了不同的策略,我們可以通過如下幾個方式改寫。
3.1 多態
具體的策略對象可以放在一個Map中,優化後的實現類似如下
關於如何存放到Map中也兩個可以參考的方式。
3.1.1 靜態表
3.1.2 Spring託管下的動態註冊
定義一個註冊中心用於接受註冊信息
將每個Strategy交由Spring管理,並在構造後註冊
使用方式就變成了
3.2 枚舉
採用多態會額外產生很多策略類,如果我們已經預先將petType定義成了枚舉,就會發現可以把Strategy中的invoke()方法放到枚舉中,從而完成了一種映射關係。
這樣在調用時的代碼就類似如下:
3.3 函數式簡化策略
同樣面對多態會額外產生很多策略類的問題,除了枚舉我們還可以使用函數式的方式來改寫,這裏有個前提最好是策略的內容不會過於複雜,不然在代碼的可讀性上會比較差
同樣我們會有一個map靜態表,不過map裏面存放的是lambda
使用方式則變成了
本文分享自華爲雲社區《改寫if-else的幾個思路》,原文作者:技術火炬手。