ivaneeo's blog

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

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          作法(Mechanics)

          首先是簡(jiǎn)單情況:

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

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

          運(yùn)用此手法,呢可能會(huì)擔(dān)心性能問(wèn)題.和其他性能問(wèn)題一樣,我們現(xiàn)在不管它,因?yàn)樗邪司鸥静粫?huì)造成任何影響.如果性能真的出了問(wèn)題,你也可以在優(yōu)化時(shí)期解決它.如果代碼組織良好,那么你往往能夠發(fā)現(xiàn)更有效的優(yōu)化法案;如果你沒有進(jìn)行重構(gòu),好的優(yōu)化法案就可能與你失之交臂.如果性能實(shí)在太糟糕,要把臨時(shí)變量放回去也是很容易的.

          posted on 2005-08-25 15:04 ivaneeo 閱讀(229) 評(píng)論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 高邮市| 日土县| SHOW| 龙岩市| 茌平县| 曲阳县| 海城市| 隆昌县| 明星| 大庆市| 龙南县| 梧州市| 綦江县| 洛扎县| 扶风县| 阆中市| 宁津县| 石台县| 江城| 重庆市| 贡觉县| 盐亭县| 宁津县| 青铜峡市| 赞皇县| 冷水江市| 建平县| 澄江县| 宣化县| 枝江市| 江达县| 山西省| 双鸭山市| 个旧市| 辽中县| 江都市| 资溪县| 桓台县| 唐河县| 金门县| 安福县|