<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-從地獄中重生
    主站蜘蛛池模板: 中文字幕手机在线免费看电影| 久久久久久久久久国产精品免费| 亚洲综合色自拍一区| 成全动漫视频在线观看免费高清版下载| 亚洲第一二三四区| 最近2019中文免费字幕| 成在线人直播免费视频| 久久综合亚洲色一区二区三区| 美女被免费视频网站a国产 | 亚洲精品美女久久久久久久| 国产a不卡片精品免费观看| a成人毛片免费观看| 最新亚洲卡一卡二卡三新区| 中文字幕日韩亚洲| 毛片a级毛片免费播放100| 国产福利电影一区二区三区,免费久久久久久久精 | 日韩激情无码免费毛片| 久久九九全国免费| mm1313亚洲国产精品无码试看| 亚洲Av永久无码精品三区在线| 日韩免费视频观看| 日本免费一区二区久久人人澡| 老牛精品亚洲成av人片| 亚洲视频一区在线观看| 亚洲婷婷国产精品电影人久久| 男女免费观看在线爽爽爽视频| 中文在线日本免费永久18近| 亚洲欧美中文日韩视频| 亚洲av一综合av一区| 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 精品亚洲麻豆1区2区3区| 亚洲国产精品成人| 无码国产精品久久一区免费| 午夜影院免费观看| www.av在线免费观看| 亚洲成av人在线观看网站 | 免费视频精品一区二区三区 | 一个人看的www免费视频在线观看 一个人免费视频观看在线www | 九九免费久久这里有精品23| 亚洲乱码无人区卡1卡2卡3| 亚洲综合免费视频|