<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-從地獄中重生
    主站蜘蛛池模板: 亚洲国产成人久久综合碰| 免费无码又爽又刺激聊天APP| 亚洲国产高清在线一区二区三区 | 西西人体大胆免费视频| 国产又大又粗又硬又长免费 | 一级**爱片免费视频| 亚洲乱亚洲乱少妇无码| 国产伦精品一区二区免费| 亚洲色成人网站WWW永久| 99免费在线视频| 亚洲一卡2卡三卡4卡有限公司| 57pao国产成视频免费播放| 亚洲成人网在线播放| 欧美男同gv免费网站观看| 亚洲精品欧美综合四区| 国产在线观看免费完整版中文版 | 久久久免费的精品| 亚洲嫩模在线观看| 四虎国产精品免费久久| 亚洲Av无码国产一区二区| 久久影视国产亚洲| 久久免费的精品国产V∧| 亚洲av日韩av无码av| 宅男666在线永久免费观看| 一级毛片在播放免费| 人人狠狠综合久久亚洲88| 性xxxxx免费视频播放| 亚洲AV电影天堂男人的天堂| 国产亚洲精品a在线无码| 日本亚洲免费无线码| 理论秋霞在线看免费| 亚洲国产日韩一区高清在线| 国产成人免费爽爽爽视频| 成人无码视频97免费| 亚洲国产精品免费在线观看| 国产美女a做受大片免费| 中文在线观看国语高清免费| 亚洲乱码日产精品BD在线观看| 全部免费a级毛片| 57pao国产成视频免费播放| 猫咪免费观看人成网站在线|