<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不卡| www国产亚洲精品久久久| 全免费a级毛片免费看无码| 成人免费福利视频| 免费观看美女用震蛋喷水的视频| 日本免费人成网ww555在线| 91热成人精品国产免费| 免费黄色大片网站| 中文字幕日韩亚洲| 亚洲综合在线成人一区| 亚洲av乱码中文一区二区三区| 亚洲欧美自偷自拍另类视| 色吊丝免费观看网站| 四虎国产精品永久免费网址 | 免费人成激情视频在线观看冫| 特级做A爰片毛片免费看无码| 最近中文字幕2019高清免费| 天天影院成人免费观看| 国产一区二区三区在线免费| 亚洲VA中文字幕不卡无码| 亚洲乱人伦精品图片| 日本亚洲免费无线码| 一级做a爰黑人又硬又粗免费看51社区国产精品视| 在线观看亚洲免费视频| 99久久婷婷免费国产综合精品| 日韩亚洲国产高清免费视频| 亚洲av无码天堂一区二区三区| 18亚洲男同志videos网站| 久久精品国产亚洲AV蜜臀色欲| 亚洲永久网址在线观看| 怡红院免费全部视频在线视频| 国产乱子精品免费视观看片| 亚洲中文字幕伊人久久无码| 亚洲人成在线精品| a成人毛片免费观看| 午夜精品在线免费观看| 亚洲视频一区二区|