『重构--改善既有代码的设计』读书笔记----Split Temporary Variable
繼續開始我們重構手法的系列,今天介紹的是Split Temporary Variable---分解臨時變量。
在我們平常寫的程序中肯定有某些臨時變量被賦予了超過一個的責任。如果他們不是那種收集結果(temp = temp + QString("abc"))或者循環變量(i = i + 1),然而他們卻被賦值了多于一次。那么我們肯定說,這個變量被賦予了超過一個的責任,別看這是個小小問題,但這會阻擾我們閱讀者的判斷,我們會去揣測,這個變量到底是用來干嘛的。從而影響我們看清程序正常的思路。
因此,我們需要針對每次賦值,創造一個獨立,對應的臨時變量。
做法:1) 在需要分解臨時變量的地方的聲明和他第一次被使用的地方,修改他的名稱。
?????????? 2) 將臨時變量改完名稱之后聲明為const
?????????? 3) 在第二次賦值的地方重新聲明那個臨時變量
?????????? 4) 編譯測試
?????????? 5) 重復上述過程,每次都在聲明處做到改名,并修改在下次賦值之前的引用點。
例子:
double getCost() {double res;double mealMoney = m_chickMoney + m_chipMoney;res += mealMoney;mealMoney = m_cocoaMoney + m_coffeeMoney;res += mealMoney;return res; }可以看到,其中的mealMoney被賦值了兩次,并且他沒有做到累積結果的作用,累積結果給了res。所以,我們需要做重構,讓這個變量的意圖變的更加明確。
所以我們第一步,尋找這個變量第一次聲明的地方,聲明為const,并且將他改名,然后修改在第二次賦值之前的所有引用點,并且把第二次賦值進行重新聲明:
double getCost() {double res;const double foodMoney = m_chickMoney + m_chipMoney;res += foodMoney;double mealMoney = m_cocoaMoney + m_coffeeMoney;res += mealMoney;return res; }可以看到,mealMoney已經被我們改成了const double foodMoney,并且我們修改了之后的引用點,并且我們在第二次賦值mealMoney的地方重新添加了聲明。重復上述過程,進行第二次變量賦值的重構
double getCost() {double res;const double foodMoney = m_chickMoney + m_chipMoney;res += foodMoney;const double drinkMoney = m_cocoaMoney + m_coffeeMoney;res += drinkMoney;return res; }可以看到,我們完成了變量的重構之后,函數對于臨時變量之前的mealMoney的困惑已經沒有了,整體因為變量名字的本身使得邏輯更加清晰。當然,這里我們暫時不考慮其他的重構手法:)
轉載于:https://www.cnblogs.com/rickyk/p/4152765.html
總結
以上是生活随笔為你收集整理的『重构--改善既有代码的设计』读书笔记----Split Temporary Variable的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql获取各种日期
- 下一篇: 第二章 二进制数值和记数系统