重構手法06:Split Temporary Variable (分解臨時變數)

來源:互聯網
上載者:User

 

你的程式有某個臨時變數被賦值超過一次,它既不是迴圈變數,也不被用於收集計算結果。針對每次賦值,創造一個獨立、對應的臨時變數

double temp = 2 + (_height + _width);

            Console.WriteLine(temp);

            temp = _height * _width;

            Console.WriteLine(temp);

 

 

const double perimeter = 2 + (_height + _width);

            Console.WriteLine(perimeter);

            const double area = _height * _width;

            Console.WriteLine(area);

 

 

動機:臨時變數有各種不同用途,其中某些用途會很自然的導致臨時變數被多次賦值。“迴圈變數”和“結果收集變數”就是典型的例子:迴圈變數會隨迴圈的每次運行而改變;   結果收集變數負責將“通過這個函數的運算”而構成的某個值收集起來。

         除了這2種情況,還有很多臨時變數儲存一段冗長代碼的運算結果,以便稍後使用。這種臨時變數應該只被賦值一次。如果它們被賦值超過一次,就意味著它們在函數中承擔了一個以上的職責。如果臨時變數承擔多個責任,它就應該被替換為多個臨時變數,每個變數只承擔一個責任。同一個臨時變數承擔2件不同的事情,會令代碼閱讀者糊塗。

做法:1、在待分解臨時變數的聲明及其第一次被賦值處,修改其名稱。如果是結果收集變數就不要分解它。

         2、將新的臨時變數聲明為const。

         3、以該臨時變數的第二次賦值動作為邊界,修改此前對該臨時變數的所有引用點,讓它們引用新的臨時變數。

         4、在第二次賦值處,重新聲明原先的那個臨時變數。

         5、編譯、測試。

         6、逐次重複上述過程。每次都在聲明處對臨時變數改名,並修改下次賦值之前的引用點。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.