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