這個主題本來想放到最後以補充的方式講的,但在開發的過程實在太常出現,任何一個有程式潔癖的人的人一定都會受不了。
我們來看一下昨天的最後一張圖。可以看到有一些灰灰的字、黃色的底線,其他時候甚至還會有紅色的底線。看起來怪礙眼的。
把游標移到第一個灰色的字,Rider 跳出了一行字,說這個賦值沒有被用到。往下看一下,發現的確,orderModels 在回傳前就被第二次的賦值蓋掉了。而左邊有一個燈泡,看起來 Rider 還想跟我說些什麼。
點下燈泡,選單中有個 Remove Redundant Initializer
,Rider 認為在不改變語意的前提下,這個做法會讓程式更好理解一點點。
照 Rider 的建議按下 Remove Redundant Initializer
後,它把後面沒必要的賦值移除了。真是太好......咦怎麼又出現紅色的燈泡!?
這次我不想要點燈泡,而是直接在紅色底線上按右鍵,選擇 Show Context Actions 也能達成一樣的效果。或是再更懶一點,直接用快捷鍵 "⌥Option
+ ↩Enter
" 也行。我看到這次 Rider 說可以把宣告和賦值合在一起 (Join Declaration and Assignment
)。也是,都 2025 年了,不會有人還信「要在函式的一開頭把所有區域變數都宣告完」的那套吧!?
按下去之後,發現紅線都不見了,程式也更好理解 (雖然只有一點點) 了~
下面的 Decrypt 方法也有相同的提示,照著 Remove Redundant Initializer
+ Join Declaration and Assignment
兩招順利解決,輕輕鬆鬆。
看看這個例子,這裡的 LINQ 有很多的紅色底線。對於不熟 C# 的人,LINQ 類似 JavaScript 的 map/reduce/filter、Java 的 Stream,提供許多函式設計 (Functional Programing, FP) 的擴充方法,讓集合的處理更為簡潔直觀。
一樣 Show Context Actions
,Rider 說 Where xxx FirstOrDefault
的寫法可以更簡潔,我們來看看。
哇!原來 FirstOrDefault 裡面也能接收條件判斷,這樣感覺的確更簡潔了。
繼續把它做完,看起來舒服多了。欸,怎麼 if 上還有紅線?
對於經驗豐富的踩雷專家,知道沒有大括號的條件判斷的危險程度,大概僅次於空白混 tab,一行還能接受,但這邊的 if 明顯很多行了,要判斷出哪行的 scope 在哪裡,對用眼過度的工程師來說簡直是在預定下一個 sprint 的 bug issue。好在 Rider 提醒我,這邊要加入大括號。
欣然接受建議。
我看到 string.Format 眉頭一皺,現在的程式語言都支援字串插值了吧?我覺得 C# 也有,來看看 Rider 有沒有什麼好的想法,按下 Show Context Actions
。果然有個 Use String Interpolation
,按下去!
看起來還可以再簡化一點,後面那個字串常值 (string literal) 沒必要用變數的方式做字串插值吧?果然,Rider 說可以 Inline String Literal Into Interpolation
,按下去!
讚啦!雖然我還是不知道這段程式碼在做什麼,但一切都看起來順眼多了。
嗯......感覺這段 FirstOrDefault 重複很多次,有沒有辦法讓它更簡單呢?明天再來看看,今天的工作量已經超過一個沙發馬鈴薯的承受範圍了,再工作下去都要被 cpu 的熱氣蒸成薯泥了,叭噗叭噗。
回想一下 Day 2. 有提到「IDE 比你更懂程式碼」。實際上不只是 AST 語法樹,Rider 團隊的人還熟稔各式不同的寫法,知道在同樣的語意下怎麼寫更簡單。很多時候我們不見得馬上就能針對程式的結構做調整,例如剛接手前團隊的遺留程式碼、或是其實我對這個語言根本不熟悉的時候,透過 Show Context Actions
,聽聽 Rider 集結眾資深專家提出的建議,可以讓快速讓程式使用更簡單、更清楚的語法和寫法。讚啦我大 Rider!!