前兩天關於 if 的重構,雖然提升了可理解性,但本質上並沒有減少複雜度。要減少複雜度,我們必須刪去一些條件式。可能嗎?既要不改變既有行為,又要刪除條件式,會不會要求太多?其實 IDE 比我們想像得更了解邏輯運算,今天來看看怎麼請它幫忙吧。
所謂冗余的條件,是指移除後也不影響原有邏輯的條件,可以從布林代數的恆等式中推導出來,例如:
a && true
如圖中的例子,可以看到 Rider 判斷它是冗余的,並把它標記成灰色。
把游標移到灰色的 true 上面,按下 Show Context Actions
,選擇 Remove Expression
。
移除~
a || true
如圖中的例子,Rider 說這個條件永遠為真。
因為 Early Return
的關係,下面的程式也因為走不到,而被標注為灰色。
把游標移到 true 上面,按下 Show Context Actions
,選擇 Replace 'if' Statement Respective Branch
。
冗余的判斷被移掉了。
接著把游標移到下面灰色的程式碼上。按下 Show Context Actions
,選擇 Remove Unreachable Code
。
完成~
如圖,Rider 判斷這個條件永遠為假。
把游標移到 false 上面,按下 Show Context Actions
,選擇 Remove 'if' Statement
。執行前確認這個選項沒有標注會改變語意 (Change Semantics)。
或是也可以在下面灰色的程式碼上。按下 Show Context Actions
,選擇 Remove Unreachable Code
。
成功移除冗余的 if~
a || false
如圖,Rider 判斷它是冗余的。
到這邊就很簡單了,跟第一個例子一樣,按下 Show Context Actions
,選擇 Remove Expression
。
完成~
今天只是先簡單介紹 Rider 判斷冗余條件式的方式,實際上遇到的會比這複雜一些些,下一篇再來看比較進階的案例。