l

2014年4月8日 星期二

談談壞味道(1):Duplicated Code

Mar. 21 14:20~15:30

螢幕截圖 2014-03-21 15.27.30

 

Duplicated Code(重複程式碼)

在〈什麼是Refactoring?〉Teddy提到如何用context、form、force來解釋refactoring與bad smell(壞味道),也提到Kent Beck和Martin Fowler在介紹壞味道的時候並沒有特別明顯地指出是那些force造成壞味道。接下來的這一系列文章Teddy想要嘗試分析一下為什麼這些壞味道會是一種壞味道。

首先看到「十大惡人」之首的duplicated code,為什麼它是一個壞味道,而且還是最壞的壞味道?《Refactoring》書中只提到:

If you see the same code structure in more than one place, you can be sure that your program will be better if you find a way to unify them.(如果你看到相同的程式結構出現在一個以上的地方,你可以確定如果把重複之處合一,你的程式將會更好。)

But why?沒說。

鄉民甲:這還要問嗎,重複就是不好啊。

重複不一定不好,如果你要開發容錯系統,重複(冗餘)就是一種常用的手段。程式碼重複造成的問題有:

  • Modifiability(修改性):降低修改性是重複程式碼最大的問題,如果程式異動之處位於重複程式碼之中,就必須要記得修改每一個重複之處,否則程式會有bug。如果你的程式從現在開始到未來的1000年都不會改變,那麼就算是現在程式中存在著很多重複程式碼,從modifiability的角度來看,也沒有關係。
  • Understandability(理解性):同樣的東西出現好幾次,到底是要表達相同的概念,還是剛好看起來很像,但處理的問題不同?
  • Testability(可測性):同樣的東西寫好幾次,也要測好幾次,不太划算啊。
  • Resource usage(資源使用):重複的程式碼會浪費記憶空間,也會增加布署或是升級的困難。寫與修改重複的程式碼也是一種資源浪費。

以上四點是Teddy目前想出來的可能force,如果鄉民們有什麼見解也歡迎提供給Teddy參考。

***

《Refactoring》書中提到可以套用Extract Method、Pull Up Field、Form Template Method、Substitute Algorithm、Extract Class來移除duplicated code壞味道,一併提供給鄉民們參考。

***

友藏內心獨白:為什麼有種物理學在尋找上帝粒子的感覺XD。

2 則留言:

  1. 5.Communication:重複程式碼多到一個程度,會讓團隊中的童子軍不想再努力做清道夫...

    不過這可能有點超出「refactoring」的範圍...

    回覆刪除
    回覆
    1. 會出現「團隊中的童子軍」應該是團隊彼此各自打江山吧?很少共同討論code的....見解

      刪除