iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Software Development

沒測試也敢重構?IDE 安全重構 30 日生存指南系列 第 16

Day 16. if 的世界線之 3:斬斷冗余的枷鎖

  • 分享至 

  • xImage
  •  

前兩天關於 if 的重構,雖然提升了可理解性,但本質上並沒有減少複雜度。要減少複雜度,我們必須刪去一些條件式。可能嗎?既要不改變既有行為,又要刪除條件式,會不會要求太多?其實 IDE 比我們想像得更了解邏輯運算,今天來看看怎麼請它幫忙吧。

所謂冗余的條件,是指移除後也不影響原有邏輯的條件,可以從布林代數的恆等式中推導出來,例如:

  • a && true == a
  • a || true = true;
  • a && false = false
  • a || false == a

1. a && true

如圖中的例子,可以看到 Rider 判斷它是冗余的,並把它標記成灰色。
https://ithelp.ithome.com.tw/upload/images/20251001/2016941490mGJ4Ntae.png

把游標移到灰色的 true 上面,按下 Show Context Actions,選擇 Remove Expression
https://ithelp.ithome.com.tw/upload/images/20251001/20169414HEKPAaSKFh.png

移除~
https://ithelp.ithome.com.tw/upload/images/20251001/20169414pN9GPAH9Uh.png

2. a || true

如圖中的例子,Rider 說這個條件永遠為真。
https://ithelp.ithome.com.tw/upload/images/20251001/20169414bGR0bBwaD7.png

因為 Early Return 的關係,下面的程式也因為走不到,而被標注為灰色。
https://ithelp.ithome.com.tw/upload/images/20251001/20169414I35MAHzADD.png

把游標移到 true 上面,按下 Show Context Actions,選擇 Replace 'if' Statement Respective Branch
https://ithelp.ithome.com.tw/upload/images/20251001/20169414cUbotAhfYs.png

冗余的判斷被移掉了。
https://ithelp.ithome.com.tw/upload/images/20251001/20169414adbatSPtwP.png

接著把游標移到下面灰色的程式碼上。按下 Show Context Actions,選擇 Remove Unreachable Code
https://ithelp.ithome.com.tw/upload/images/20251001/201694149DtiblWA0n.png

完成~
https://ithelp.ithome.com.tw/upload/images/20251001/20169414L6VJN4v0hd.png

3. a && false

如圖,Rider 判斷這個條件永遠為假。
https://ithelp.ithome.com.tw/upload/images/20251001/20169414ep6TX8q2Dn.png

把游標移到 false 上面,按下 Show Context Actions,選擇 Remove 'if' Statement。執行前確認這個選項沒有標注會改變語意 (Change Semantics)。
https://ithelp.ithome.com.tw/upload/images/20251001/201694148y2hl3ppJn.png

或是也可以在下面灰色的程式碼上。按下 Show Context Actions,選擇 Remove Unreachable Code
https://ithelp.ithome.com.tw/upload/images/20251001/20169414m83Js4Yhk9.png

成功移除冗余的 if~
https://ithelp.ithome.com.tw/upload/images/20251001/20169414KzAM3LPAXh.png

4. a || false

如圖,Rider 判斷它是冗余的。
https://ithelp.ithome.com.tw/upload/images/20251001/20169414CjpvM8CyFc.png

到這邊就很簡單了,跟第一個例子一樣,按下 Show Context Actions,選擇 Remove Expression
https://ithelp.ithome.com.tw/upload/images/20251001/20169414IluTWfUrHq.png

完成~
https://ithelp.ithome.com.tw/upload/images/20251001/20169414pN9GPAH9Uh.png

小結

今天只是先簡單介紹 Rider 判斷冗余條件式的方式,實際上遇到的會比這複雜一些些,下一篇再來看比較進階的案例。


上一篇
Day 15. if 的世界線之 2:不同世界線的收束與發散
下一篇
Day 17. if 的世界線之 4:富有既視感的條件式
系列文
沒測試也敢重構?IDE 安全重構 30 日生存指南17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言