教你如何優雅的改寫“if-else”

摘要:這些場景,你是怎麼寫的代碼?

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的幾個思路》,原文作者:技術火炬手。

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章