2010年5月16日 星期日

重構(Refactoring)的範例程式碼

最近剛好有機會講Refactoring,用Martin Fowler原書第一章的範例。最早是聽以前的同事老王用這個例子上課,覺得效果很好,兩年前我也用這個例子講過一次。這兩年當中經過更多不同程式碼的洗禮(請參考極品程式碼三部曲1, 2, 3),對這個範例的看法又不一樣。這次講課,我儘可能少說明整個程式的邏輯,也不給聽眾讀懂程式碼的時間,在對全貌了解很有限的前提下,說明如何refactor。隨著翻修的進行,程式碼在做什麼也逐漸明朗。這過程也就順帶說明,refactoring不只是為了整理程式碼,也是讀程式碼(code inspection)的技巧。

用這個角度示範會更符合真實狀況。因為即使是自己寫的程式碼,也不一定能在第一時間就看懂。

兩年前為了準備講課,才第一次在Eclipse上,照書上的指示,真的一個動作一個動作來做。親手操作,和之前只是閱讀相比,有很多不一樣的體會,原先只有看書沒辦法了解到麼深入。所謂教學相長真是一點都不假。第一章範例原始碼是從原書官網下載的

當時走過第一章範例以後,覺得不過癮,還接著演練一個複雜好幾倍的例子。這個例子原先是Refactoring書中的第十五章,是上百頁的大部頭,叫做A Longer Example。後來可能為了篇幅等其他考慮而捨棄,十五章改成Kent Beck寫的簡短結語。這個範例就更像真實世界的範例,不像第一章為了說明方便,用那麼簡單程式碼。丟棄的這章在原書官網一樣可以下載。不過只有書的內容PDF檔,沒有附上可編譯的原始碼。做完這個範例,就對Refactoring有相當程度的了解了。從此我都建議想讀這本書的人,先做過這兩個範例。這是最速成的方法。

我當時花一些時間,從PDF剪貼出原始碼,補上缺漏的class,粗略地整理過。當時就想在Blog分享,不過似乎裡面有一些小缺點待改善,一直因為其他事情耽擱著,忙著忙著就忘了。最近需要講課才又想起來。如有興趣,請在這裡下載。大致應該沒有問題,如果發現瑕疵請跟我說,我會再改進。

最後聲明一點,這些原始碼的著作權是屬於作者,我只是做簡單的整理。相信出版商與作者不會反對整理分享的動作,尤其這對這本好書有宣傳的效果。

沒有留言: