重構 - 改善既有程式的設計 - Comments
April 15, 2020這篇文章討論《重構 - 改善既有程式的設計》裡的3.22 - Comments
圖片以及程式碼來源自重構 - 改善既有程式的設計
過多的註釋
我們使用註釋的理由 就是覺得程式碼本身 不夠讓讀者了解程式碼的意圖
所以要是你看到過多的註釋 代表你的程式碼就寫得不夠好 不夠清楚
最理想的情況是 當你看到註釋 你再去找我們提到的可能的壞味道 找到壞味道後用我們講的方式重構 重構完後你就會發現 註釋本身已經變得多餘了
解法
通常 一個好的變數名稱或是函式名稱 就可以讓你不再需要註釋
Extract Variable
void render() {
if((platform.toUpperCase().indexOf("MAC") > -1) && (browser.toUpperCase().indexOf("IE") > -1))
{
// render MAC OS with IE broswer
renderMacWithIE();
}
if((platform.toUpperCase().indexOf("MAC") > -1) && (browser.toUpperCase().indexOf("CHROME") > -1))
{
// render MAC OS with chrome broswer
renderMacWithChrome();
}
}
應該改成這樣寫 就不需要註釋了
void render() {
final boolean isMacOS = platform.toUpperCase().indexOf("MAC") > -1;
final boolean isIE = browser.toUpperCase().indexOf("IE") > -1;
final boolean isChrome = browser.toUpperCase().indexOf("CHROME") > -1;
if(isMacOS && isIE)
{
renderMacWithIE();
}
if(isMacOS && isChrome)
{
// render MAC OS with chrome broswer
renderMacWithChrome();
}
}
Extract Method
Rename Method
要是你費盡心思把複雜的函式拆解成眾多小函式 但你卻命名的很難懂 那就會更難讓人理解
void getinvcdtlmt()
String getsnm()
????
void getInvoiceableCreditLimit()
String getSecondName()
Easy!
例外
有些時機還是非得用註釋不可
1.你解釋為什麼(why)你要這麼實作的時候
2.當你需要解釋你的複雜演算法時