<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

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

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

    范例(Examples)
    首先,我從一個簡單函數開始:
    double getPrice() {
       int basePrice = _quantity * _itemPrice;
       double discountFactor;
       if(basePrice > 1000) discountFactor = 0.95;
       else   discountFactor = 0.98;
       return basePrice * discountFactor;
    }

    我希望將兩個臨時變量都替換掉.當然,每次一個.

    盡管這里的代碼十分清楚,我還是先把臨時變量聲明為final,檢查它們是否的確只被賦值一次:
    double getPrice() {
       final int basePrice = _quantity * _itemPrice;
       final double discountFactor;
       if(basePrice > 1000) discountFactor = 0.95;
       else   discountFactor = 0.98;
       return basePrice * discountFactor;
    }

    這么一來,如果有任何問題,編譯器就會警告我.之所以先做這件事,因為如果臨時變量不知被賦值一次,我就不該進行這項重構.接下來我開始替換臨時變量,每次一個.首先我把賦值(assignment)動作的右側表達式提煉出來:
    double getPrice() {
       final int basePrice = basePrice();
       final double discountFactor;
       if(basePrice > 1000) discountFactor = 0.95;
       else   discountFactor = 0.98;
       return basePrice * discountFactor;
    }
    private int basePrice() {
       return _quantity * _itemPrice;
    }

    編譯并測試,然后開始使用Inline Temp(119).首先把臨時變量basePrice的第一個引用點替換掉:
    double getPrice() {
       final int basePrice = basePrice();
       final double discountFactor;
       if(basePrice() > 1000) discountFactor = 0.95;
       else   discountFactor = 0.98;
       return basePrice * discountFactor;
    }


    編譯,測試,下一個.由于[下一個]已經是basePrice的最后一個引用點,所以我把basePrice臨時變量的聲明式一并摘除:
    double getPrice() {
       final double discountFactor;
       if(basePrice() > 1000) discountFactor = 0.95;
       else   discountFactor = 0.98;
       return basePrice() * discountFactor;
    }


    搞定basePrice之后,我再以類似辦法提煉出一個discountFactor():
    double getPrice() {
       final double discountFactor = discountFactor();
          return basePrice() * discountFactor;
    }
    private double discountFactor() {
       if(basePrice() > 1000) return 0.95;
       else   return 0.98;
    }

    你看,如果我沒有把臨時變量basePrice替換為一個查詢式,將多么難以提煉discountFactor()!

    最終,getPrice()變成了這樣:
    double getPrice() {
          return basePrice() * discountFactor();
    }

    posted on 2005-08-25 15:14 ivaneeo 閱讀(259) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
    主站蜘蛛池模板: 国产精品永久免费| 免费国产高清毛不卡片基地 | 污污网站免费观看| 国产乱辈通伦影片在线播放亚洲| 亚洲第一街区偷拍街拍| 波多野结衣久久高清免费| 亚洲人成无码网WWW| 男女交性无遮挡免费视频| www亚洲一级视频com| 亚洲一区二区三区夜色| 亚洲日韩亚洲另类激情文学| 中文字幕在线免费视频| 色久悠悠婷婷综合在线亚洲| 亚洲性一级理论片在线观看| 日日躁狠狠躁狠狠爱免费视频| 久久99精品国产免费观看| 久久夜色精品国产噜噜亚洲AV| 亚洲成人免费网站| 亚洲熟女综合色一区二区三区| 香蕉视频在线观看免费国产婷婷| 色屁屁www影院免费观看视频| 性短视频在线观看免费不卡流畅| 亚洲乱码卡一卡二卡三| 精品国产污污免费网站入口在线| 免费看的一级毛片| 一级免费黄色毛片| 婷婷精品国产亚洲AV麻豆不片| 亚洲w码欧洲s码免费| 亚洲精品无码av中文字幕| 亚洲一区二区三区乱码A| 久久99精品国产免费观看| 亚洲一区二区三区深夜天堂| 久久狠狠躁免费观看| 亚洲av永久综合在线观看尤物| 国产一卡二卡≡卡四卡免费乱码| 亚洲成年人电影网站| 白白国产永久免费视频| 在线观看免费无码视频| 亚洲va在线va天堂va手机| 亚洲精品国产高清嫩草影院 | 国产午夜无码片免费|