重構筆記——替換演算法,重構替換演算法
本文是在學習中的總結,歡迎轉載但請註明出處:http://blog.csdn.net/pistolove/article/details/42582611
在上一篇文章中介紹了“以函數取代函數對象”。本文將介紹“替換演算法”這種重構手法。
下面讓我們來學習這種重構手法吧。
開門見山
發現:你想要把某個演算法替換為另一個更清晰的演算法。
解決:將函數本體替換為另一個演算法。
//重構前String foundPerson(String[] people){for (int i = 0; i < people.length; i++) {if(people[i].equals("Don")){return "Don";}if(people[i].equals("John")){return "John";}if(people[i].equals("Dave")){return "Dave";}}return "";}
//重構後String foundPerson(String[] people){List<String> candidates = Arrays.asList(new String[]{"Don","John","Dave"});for (int i = 0; i < people.length; i++) {if(candidates.contains(people[i])){return people[i];}}return "";}
動機
解決問題的方法往往會有很多種,但是其中總會有一些方法比另一些簡單。演算法也是如此。如果你發現做一件事可以有更加清晰的方式,就應該以清晰的方式取代複雜的方式。“重構”可以把一些複雜東西分解為較簡單的小塊,當有時候你就必須刪除整個演算法,待之以簡單的演算法。
隨著對問題有了更多瞭解,你往往會發現,在原先的做法之外,有更簡單的解決方案,此時,你就需要改變原先的演算法,使之變得更加清晰、簡潔。
在使用這項重構手法之前,你需要確定自己已經儘可能分解原先函數。替換一個巨大而複雜的演算法是非常困難的,只有先將它分解為較簡單的小型函數,然後你才能很有把握地進行演算法替換工作。
做法
(1)準備好一個(替換用)的演算法,讓其通過編譯。(2)針對現有測試,執行上述新演算法。如果結果和原本結果相同,重構結束。(3)如果測試結果不同於原先,在測試和調試過程中,以舊的演算法為參照標準。
本文主要介紹了重構手法——替換演算法。我覺得該重構手法不是特意去尋找某個演算法來替換當前的演算法,而是在你開發的過中,當你發現某一段代碼可以變得更好,可以被一個的獨立的函數或者演算法替換的時候,才進行該重構手法。如果單純為了重構而重構,那是沒有意義的。應該以實際情況為標準,加以判斷,再考慮是否進行重構。 從重構筆記——提煉函數到本篇文章,都是圍繞著以“重新組織函數”的方式來進行的重構。在隨後的文章中,將介紹“在對象之間進行搬移”的方式來進行重構,感興趣的可以一起學習、努力。
最後,希望本文對你有所協助。有問題可以留言,謝謝。
重構筆記文章如下
重構筆記——入門篇
重構筆記——代碼的壞味道(上)
重構筆記——代碼的壞味道(下)
重構筆記——構築測試體
重構筆記——提煉函數
重構筆記——內嵌函式
重構筆記——內聯臨時變數
重構筆記——以查詢取代臨時變數
重構筆記——引入解釋性變數
重構筆記——分解臨時變數
重構筆記——移除對參數的賦值
重構筆記——以函數對象取代函數
重構筆記——替換演算法