--- robots: noindex, nofollow tags: refactoring --- # Long Function ![](https://i.imgur.com/yXd5xQy.png) ## 徵兆與症狀 通常你看到一個超過十行的 method/function,內心都需要問自己一下,這個 method/function 是不是作太多事情了。 ## 出現原因 只往程式庫裡面加東西,但卻不移除任何東西。 按照人類大腦運作方式,往程式庫裡面加上新 method/function 往往比改寫既有 method/function 來的容易一些,需要一陣子後才會驚覺程式庫變成難以處理的怪獸。 ## 處理方法 有個實用方法,如果你覺得需要在 method/function 裡面寫註解,通常寫個新 method/function 會好一些。 - 可以使用 `Extract Function` 來減少 mehtod/function 的大小。 - 抽取過程中,你可能會發現有一些暫存的變數,這時候可以用 `Replace Temp with Query`;若是需要傳遞的參數越來越多,可以用 `Introduce Parameter Object` 或 `Preserve Whole Object`。 - 如果你嘗試過以上作法,但還是不太管用,可以使用 `Replace Function with Command`。 - 註解、條件判斷及迴圈往往也是抽取的暗示,可以使用 `Decompose Conditional` 來處理條件判斷,如果有多個 switch 結構在判斷類似事情的話,可以考慮使用 `Replace Conditional with Polymorphism`。 - 如果迴圈內做的事情不夠單一,可以使用 `Split Loop` 拆成單一任務,然後再抽取出來。