shihyingru
4/9/2019 - 8:28 AM

Refactoring Code

Reference Book:M.Fowler et al - Refactoring - Improving the Design of Existing (重構-改善既有程式的設計)

  • 重構手法 -- Extract Method
  • 重構

重構手法 -- Extract Method

函式的長度並不一定是重點,關鍵在於函式名稱和函式本體之間的語意距離。如果提煉(Extracting)動作可以強化程式碼的清晰度,便是可行的作法。函式名稱比提煉的程式碼還長也沒關係。

  • 創造一個新函式,根據函式的意圖予以命名(以"作什麼"來命名)
  • 將提煉出的code從源函式copy到新建的目標函式中
  • 檢查提煉出的code,查看其中是否引用了作用域(scope)限於原函式的變數(包括區域變數和源函式變數) (是否有變數只能在當頁或是原本的函式中才能使用)
  • 檢查是否有僅用於被提煉code的暫時變數(Temporary variables),如果有便在目標函式中將他們宣告為暫時變數。
  • 檢查被提煉碼的是否有區域變數(local-scope variables)被該函式改變,如果有,試著將被提煉碼處理為一個查詢(query),並將結果賦值給相關變數。如果很難這樣作,可能需要先使用Split Temporary Variable或是Replace Temp eith Query。
  • 將被提煉碼中需要讀取的區域變數,當作參數傳給目標函式(targetFunc(parameter))。
  • 處理完所有區域變數之後,進行編譯。
  • 在源函式中,將被提煉碼替換為對targetFunc()的呼叫。
  • 編譯,測試。

重構

為何重構?

  • 改進軟體設計
    設計不良的程式往往需要更多程式碼,通常是因為程式碼在不同的地方使用完全相同的句子作同樣的事。
    因此改進設計的其一重要方向就是消除重複程式碼(Duplicate Code)。
    雖然程式碼數量減少並不會使系統執行得更快,但程式碼數量減少會讓未來的程式修改動作容易得多。
  • 重構使軟體更易被理解
    可理解性是為了讓人類更容易理解程式碼,機器執行更久一點其實無仿,但花一些時間重構,讓程式碼更好的表達自己的用途,   這種編程模式的核心就是準確說出你的意思。
    Ralph Johnson將這種早期重構描述為"擦掉窗戶上的汙垢,使你看得更遠",重構讓程式碼漸趨簡潔,
    就能讓自己看到一些以前看不到的設計層面的東西。
  • 重構幫助你找到臭蟲(bug)
  • 重構幫助你加快編程速度
    重構幫助你更快速的開發程式。
    良好設計是維持軟體開發速度的根本。因為重構可以阻止系統腐敗變質,甚至還可以提高設計品質。

何時重構?

  • 三次法則
    1.添加功能時一併重構
    2.修補錯誤時一併重構
    3.復審程式碼時一併重構