前幾天都在講抽方法、抽參數的東西,今天開始要進到流程控制的部分了,重構最危險的地方也是在這裡。想想過去有多少次在改 if 的時候,因為少加一個驚嘆號 !
,而導致整個邏輯反了。透過 Rider 是可以很大機率避免這件事的,今天我們就來看看吧。
這裡有一個 if 波動拳。大家都知道,程式寫得太巢,會讓可讀性變得很差。我想試著把它改成 Early Return
(或稱 Guard Clause
) 的寫法。
把游標移到 if 上,按下 Show Context Actions
,可以看到有個 Invert 'If'
可以用。
點下去之後,不只是原本的邏輯判斷式、連 return 都幫你安排得妥妥當當,就是這麼簡單。
這裡有一個 if-else,我感覺用三元運算子的寫法會比較簡潔。
一樣把游標移到 if 上,按下 Show Context Actions
,有個 Convert to '?:' Operator
可以用。
簡簡單單,輕輕鬆鬆。
這邊有好多個 if-else,因為某些會引起宗教戰爭的原因,我想把它改成 switch 的寫法。
把游標移到 if 上,按下 Show Context Actions
,選擇 Convert to 'Switch' Statement
。
噹噹!
繼續上面的例子,若是一個變數有多個賦值,會造成邏輯很難追蹤,也很難做許多種類的重構。把游標移到 return 上,按下 Show Context Actions
,選擇 Inline Control Transfer Statement
。
可以看到 return 都塞進各個 block 裡面了,瞬間減少多重賦值的問題,這是我最喜歡的重構。
C# 有一個 Switch Expression
的語法,可以讓這個 switch 更簡潔一點。選擇 Convert to 'Switch' Expression
結果像這樣。
自從經歷過幾次 if 條件沒改好而導致的 bug 後,碰到 if 的重構時都盡可能避免手改。真的不得已的情況,則千萬、務必、一定要寫測試。明天我們來看更多的 if 重構技。