ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          作法(Mechanics)

          首先是簡單情況:

            • 找出只被賦值一次的臨時變量==>如果某個臨時變量被賦值超過一次,考慮使用Split Temporay Variable(128)將它分割成多個變量.
            • 將該臨時變量聲明為final.
            • 編譯.==>這可確保該臨時變量的確只被賦值一次.
            • 將[對臨時變量賦值]之語句的等號右側部分提煉到一個獨立函數中.
                • ==>首先將函數聲明為private.日后你可能會發現有更多class需要使用它,彼時你可輕易放松對它的保護.
                • ==>確保提煉出來的函數無任何連帶影響(副作用),也就是說該函數并不修改任何對象內容.如果它有連帶影響,就對它進行Separate Query from Modifier(279).
            • 編譯,測試.
            • 在該臨時變量身上實施Inline Temp(119).

          我們常常使用臨時變量保存循環中的累加信息.在這種情況下,整個循環都可以被提煉為一個獨立函數,這也使原本的函數可以少掉幾行擾人的循環代碼.有時候,你可能會用單一循環累加好幾個值.這種情況下你應該針對每個累加值重復一遍循環,這樣就可以將所有臨時變量都替換為查詢式(query).當然,循環應該很簡單,復制這些代碼時才不會帶來危險.

          運用此手法,呢可能會擔心性能問題.和其他性能問題一樣,我們現在不管它,因為它十有八九根本不會造成任何影響.如果性能真的出了問題,你也可以在優化時期解決它.如果代碼組織良好,那么你往往能夠發現更有效的優化法案;如果你沒有進行重構,好的優化法案就可能與你失之交臂.如果性能實在太糟糕,要把臨時變量放回去也是很容易的.

          posted on 2005-08-25 15:04 ivaneeo 閱讀(229) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 喜德县| 克山县| 凌云县| 汽车| 托克托县| 炉霍县| 青冈县| 安仁县| 广元市| 隆安县| 喜德县| 蒙山县| 比如县| 汉沽区| 平凉市| 灵丘县| 湾仔区| 疏勒县| 隆子县| 德格县| 静安区| 平遥县| 防城港市| 许昌县| 山东| 湘潭市| 清镇市| 徐州市| 博乐市| 永城市| 临泉县| 龙陵县| 云林县| 重庆市| 张家川| 张北县| 逊克县| 禹州市| 清丰县| 信阳市| 会昌县|