什么是重構?
所謂重構是這樣一個過程:在不改變代碼外在行為的前提下,對代碼作出修改,以改進程序的內(nèi)部結(jié)構。本質(zhì)上說,重構就是在代碼寫好之后改進它的設計。
重構(名詞):對軟件內(nèi)部結(jié)構的一種調(diào)整,目的是在不改變軟件可觀察行為的前提下,提高其可理解性,降低其修改成本。
重構(動詞):使用一系列重構手法,在不改變軟件可觀察行為的前提下,調(diào)整其結(jié)構。
重構的目的是使軟件更容易被理解和修改。重構不會改變軟件可觀察的行為——重構之后軟件功能一如既往。重構技術就是以微小的步伐修改程序,如果你犯下錯誤,很容易便可以發(fā)現(xiàn)它。
重構的節(jié)奏:測試、小修改、測試、小修改、測試、小修改......盡管遵循重構手法可以使我避免絕大多數(shù)引入bug的情形,但是人就可能引入錯誤,因此,重構需要引入可靠的測試。
為何重構?
(1) 重構改進軟件設計。如果沒有重構,程序的設計會逐漸腐敗變質(zhì)。相同的代碼往往會在不同的地方做著相同的事,改進設計的一個方向就是消除這些重復代碼,這正是優(yōu)秀設計的根本。
(2)重構使軟件更容易理解。除了計算機以外,幾個月后可能會有另一名程序員嘗試讀懂你的代碼并做一些修改。因此,一份易懂的代碼會提升整體編程效率。另外,我們還可以利用重構協(xié)助理解不熟悉的代碼。
(3)重構幫助找到bug。對代碼進行重構,可以幫助我們深入理解代碼,對代碼理解的越深,就越能幫我們找到bug。重構能夠幫我們更有效地寫出強健的代碼。
(4)重構提高編程速度。重構可以幫助我們更快速地開發(fā)軟件,因為它阻止系統(tǒng)腐敗變質(zhì),它甚至還可以提高設計質(zhì)量。
tips:任何一個傻瓜都能寫出計算機可以理解的代碼,唯有寫出人類容易理解的代碼,才是優(yōu)秀的程序員。
何時進行重構?
三次法則:第一次做某事時只管去做;第二次做類似的事情會產(chǎn)生反感,但無論如何還可以去做;第三次再做類似的事情,你就應該重構。
添加功能時重構。添加功能時是最常見的重構時機,因為重構可以幫助我快速理解我需要修改的代碼。另外一個原動力就是:代碼的設計無法讓我輕松的添加我需要的特性。
修補錯誤時重構。當你無法一眼看出bug所在位置時,就是梳理代碼并且進行重構的好時機。
復審代碼時重構。代碼檢視不應該是對業(yè)務邏輯的審核,更應該是讓經(jīng)驗豐富的開發(fā)者將開發(fā)經(jīng)驗傳遞給缺乏經(jīng)驗的新手開發(fā)的方法。重構方法應該成為一個重要的issue.