Replace Temp With Query - refactor with android studio

是怎樣?

重構前:

double getPrice() {
    int basePrice = _quantity * _itemPrice;
    double discountFactor;
    if (basePrice > 1000) {
        discountFactor = 0.95;
    } else {
        discountFactor = 0.98;
    }
    return basePrice * discountFactor;
}
   
重構后:
>```Java
    double getPrice() {
        return basePrice() * discountFactor();
    }
    private double discountFactor() {
        if (basePrice() > 1000) {
            return 0.95;
        } else {
            return 0.98;
        }
    }
    private int basePrice() {
        return _quantity * _itemPrice;
    }

如何做?

  • 先給這兩個臨時變量添加 final 修飾詞確保他們只被賦值一次
        final int basePrice = _quantity * _itemPrice;
        final double discountFactor;
  • 選中 basePrice, 右鍵 -> refactor -> Replace Temp With Query
   double getPrice() {
        final double discountFactor;
        if (basePrice() > 1000) {
            discountFactor = 0.95;
        } else {
            discountFactor = 0.98;
        }
        return basePrice() * discountFactor;
    }

    private int basePrice() {
        return _quantity * _itemPrice;
    }
  • 運行測試。
  • 接著開始替換discountFactor變量。這里不能直接用Replace Temp With Query, 先選中如下代碼,
        final double discountFactor;
        if (basePrice() > 1000) {
            discountFactor = 0.95;
        } else {
            discountFactor = 0.98;
        }

用 Extract Method(cmd + opt + m) 將他們提煉到一個獨立的方法中去, 由于后續還需要用到discountFactor的值,所以這里在Extract Method的時候,要提供一個返回值,不過android studio 會自動做完這個步驟。執行完成之后:

    private double discountFactor() {
        final double discountFactor;
        if (basePrice() > 1000) {
            discountFactor = 0.95;
        } else {
            discountFactor = 0.98;
        }
        return discountFactor;
    }

運行測試。對discountFactor這個方法可以再簡化一下,去掉臨時變量,運行測試。

    private double discountFactor() {
        if (basePrice() > 1000) {
            return 0.95;
        } else {
            return 0.98;
        }
    }
  • 現在getPrice方法像這樣:
    double getPrice() {
        final double discountFactor = discountFactor();
        return basePrice() * discountFactor;
    }

去掉臨時變量,運行測試。

    double getPrice() {
        return basePrice() * discountFactor();
    }

詳細閱讀參考《重構》(看云)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,771評論 0 33
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,885評論 1 10
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • Java經典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子...
    趙宇_阿特奇閱讀 1,909評論 0 2
  • 怎么辦?怎么辦?我們迷路了?天漸黑,嘗試幾次尋找出路,未果!團長說,我們還是先去找點食物,以防今晚被困山里!孩子一...
    大馬虎遇見了小怪物閱讀 409評論 0 2