<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 閱讀(253) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
    主站蜘蛛池模板: 亚洲第一区二区快射影院| 亚洲综合色丁香麻豆| 免费少妇a级毛片| 综合亚洲伊人午夜网| 久久精品国产亚洲AV无码娇色| 久久亚洲AV成人出白浆无码国产| 久久免费99精品国产自在现线| 在线观看www日本免费网站| 一二三四免费观看在线电影| 国产精品亚洲综合专区片高清久久久 | 黄色免费网站网址| 国产成人免费全部网站| 亚洲高清国产拍精品26U| 国产亚洲sss在线播放| 国产免费久久精品丫丫| 亚洲人成色77777在线观看大 | 亚洲中文无码线在线观看| 亚洲国产精品成人精品软件| 一级特黄a大片免费| 黄页网站免费观看| 亚洲国产天堂在线观看| 精品亚洲成A人在线观看青青| 无码日韩精品一区二区三区免费| 在线a人片天堂免费观看高清| 亚洲国产另类久久久精品| 日本xxxx色视频在线观看免费| 亚洲伊人久久综合中文成人网| 亚洲高清一区二区三区电影| 99久久久国产精品免费牛牛| 亚洲av成人一区二区三区| 四虎影视在线永久免费观看| 亚洲人成色77777在线观看| 国产大片91精品免费观看不卡| 亚洲色成人WWW永久网站| 午夜亚洲乱码伦小说区69堂| 国国内清清草原免费视频99| 国产亚洲精品美女久久久久久下载| 一本色道久久综合亚洲精品| a拍拍男女免费看全片| 免费的黄色的网站| www.亚洲一区|