refacforing

重構 - 改善既有程式的設計 - Comments

這篇文章討論《重構 - 改善既有程式的設計》裡的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.當你需要解釋你的複雜演算法時