摘要:這些場景,你是怎么寫的代碼?
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的幾個思路》,原文作者:技識訓炬手,
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/263321.html
標籤:其他
