ivaneeo's blog

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

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          最終的效果是:你應(yīng)該更積極進(jìn)取地分解函數(shù)。我們遵循這樣一條原則:每當(dāng)感覺(jué)需要以注釋來(lái)說(shuō)明點(diǎn)什么的時(shí)候,我們就把需要說(shuō)明的東西寫(xiě)進(jìn)一個(gè)獨(dú)立函數(shù)中, 并以其用途(而非實(shí)現(xiàn)手法)命名。我們可以對(duì)一組或甚至短短一行代碼做這件事。哪怕替換后的函數(shù)調(diào)用動(dòng)作比函數(shù)自身還長(zhǎng),只要函數(shù)名稱能夠解釋其用途,我 們也該毫不猶豫地那么做。關(guān)鍵不在于函數(shù)長(zhǎng)度,而在于函數(shù)[做什么]和[如何做]之間的語(yǔ)義距離。

          百分之九十九的場(chǎng)合里,要把函數(shù)變小,只需使用Extract Method(110)。找到函數(shù)中適合集在一起的部分,將它們提煉出來(lái)形成一個(gè)新函數(shù)。

          如果函數(shù)內(nèi)有大量的參數(shù)和臨時(shí)變量,它們會(huì)對(duì)你的函數(shù)提煉形成阻礙。如果你嘗試運(yùn)用Extract Method(110),最終就會(huì)把許多這些參數(shù)和臨時(shí)變量當(dāng)作參數(shù),傳遞給被提煉出來(lái)的新函數(shù),導(dǎo)致可讀性幾乎沒(méi)有任何提升。啊是的,你可以經(jīng)常運(yùn)用Replace Temp with Query(120)來(lái)消除這些暫時(shí)元素。Introduce Parameter Object(295)和Preserve Whole Object(288)則可以將過(guò)長(zhǎng)的參數(shù)列變得更簡(jiǎn)潔一些。
          如果你已經(jīng)這么做了,仍然有太多臨時(shí)變量和參數(shù),那就應(yīng)該使出我們的殺手锏:Replace Method with Method Object(135)。

          如何確定該提煉哪一段代碼呢?一個(gè)很好的技巧是:尋找注解。它們通常是指出[代碼用途和實(shí)現(xiàn)手法間的語(yǔ)義距離]的信號(hào)。如果代碼前方有一行注解,就是在提 醒你:可以將這段代碼替換成一個(gè)函數(shù),而且可以在注解的基礎(chǔ)上給這個(gè)函數(shù)命名。就算只有一行代碼,如果它需要以注解來(lái)說(shuō)明,那也值得將它提煉到獨(dú)立函數(shù) 去。
          條件式和循環(huán)常常也是提煉的信號(hào)。你可以使用Decompose Conditional(238)處理?xiàng)l件式。至于循環(huán),你應(yīng)該將循環(huán)和其內(nèi)的代碼提煉到一個(gè)獨(dú)立函數(shù)中。
          posted on 2005-08-18 14:15 ivaneeo 閱讀(396) 評(píng)論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 宁陕县| 汕尾市| 吉木乃县| 临清市| 巴南区| 常熟市| 孟村| 寿宁县| 睢宁县| 金川县| 革吉县| 临沧市| 南岸区| 石景山区| 洪泽县| 革吉县| 镇康县| 固原市| 宜阳县| 石嘴山市| 浦北县| 陵水| 隆德县| 胶南市| 新兴县| 珲春市| 大悟县| 洛浦县| 柯坪县| 无锡市| 临泉县| 凯里市| 兴海县| 天门市| 留坝县| 汉中市| 米林县| 手游| 翁牛特旗| 左云县| 南投县|