『重构--改善既有代码的设计』读书笔记----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的困惑已经没有了,整体因为变量名字的本身使得逻辑更加清晰。当然,这里我们暂时不考虑其他的重构手法:)
『重构--改善既有代码的设计』读书笔记----Split Temporary Variable的更多相关文章
- 『重构--改善既有代码的设计』读书笔记----Introduce Explaning Variable
有时候你会遇到一系列复杂的表达式连续运算的时候,这个时候你可能根本招架不住如此长或者是如此复杂的长函数.这个时候你可以通过引用临时变量来储存他们的结果,将这些长函数的结果分成一个个临时变量来让函数清晰 ...
- 『重构--改善既有代码的设计』读书笔记----Replace Temp with Query
Replace Temp with Query,顾名思义,表示你用查询来替换临时变量本身,临时变量对于函数来说是只有当前函数可见的,如果你在同类的别的地方要用到这个变量你就必须重新写表达式来获取这个变 ...
- 『重构--改善既有代码的设计』读书笔记----Extract Method
在编程中,比较忌讳的一件事情就是长函数.因为长函数代表了你这段代码不能很好的复用以及内部可能出现很多别的地方的重复代码,而且这段长函数内部的处理逻辑你也不能很好的看清楚.因此,今天重构第一个手法就是处 ...
- 『重构--改善既有代码的设计』读书笔记----Change Value to Reference
有时候你会认为某个对象应该是去全局唯一的,这就是引用(Reference)的概念.它代表当你在某个地点对他进行修改之后,那么所有共享他的对象都应该在再次访问他的时候得到相应的修改.而不会像值对象(Va ...
- 『重构--改善既有代码的设计』读书笔记----Replace Method with Method Object
有时候,当你遇到一个大型函数,里面的临时变量和参数多的让你觉得根本无法进行Extract Method.重构中也大力的推荐短小函数的好处,它所带来的解释性,复用性让你收益无穷.但如果你遇到上种情况,你 ...
- 『重构--改善既有代码的设计』读书笔记---Duplicate Observed Data
当MVC出现的时候,极大的推动了Model与View分离的潮流.然而对于一些已存在的老系统或者没有维护好的系统,你都会看到当前存在大把的巨大类----将Model,View,Controller都写在 ...
- 『重构--改善既有代码的设计』读书笔记----Replace Array with Object
如果你有一个数组,其中的元素各自代表不同东西,比如你有一个 QList<QString> strList; 其中strList[0]代表选手姓名,strList[1]代表选手家庭住址,很显 ...
- 『重构--改善既有代码的设计』读书笔记----Self Encapsulate Field
如果你直接访问一个字段,你就会和这个字段直接的耦合关系变得笨拙.也就是说当这个字段权限更改,或者名称更改之后你的客户端代码都需要做相应的改变,此时你可以为这个字段建立设值和取值函数并且只以这些函数来访 ...
- 『重构--改善既有代码的设计』读书笔记----Move Method
明确函数所在类的位置是很重要的.这样可以避免你的类与别的类有太多耦合.也会让你的类的内聚性变得更加牢固,让你的整个系统变得更加整洁.简单来说,如果在你的程序中,某个类的函数在使用的过程中,更多的是在和 ...
随机推荐
- 搜索(DLX): POJ 3074 3076 Sudoku
POJ 3074 : Description In the game of Sudoku, you are given a large 9 × 9 grid divided into smaller ...
- 动态树(LCT):HDU 4010 Query on The Trees
Query on The Trees Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Othe ...
- supesite 相关 修改
1.修改 站点名称及logo http://faq.comsenz.com/viewnews-594 2.supesite 如何 收录论坛 http://faq.comsenz.com/viewnew ...
- Binary Tree Zigzag Level Order Traversal——LeetCode
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- spj题
S(SNO,SNAME,SCITY) ,P(PNO,PNAME,COLOR,WEIGHT) ,J(JNO,JNAME,JCITY),其中S表示供应商,它的各属性依次为供应商号,供应商名,供应商所在城市 ...
- Theme Section - HDU 4763(KMP)
题目大意:给你一个串,从这个串里面找出一个前缀后缀中间相等的串的最大长度也就是 EAEBE,每个字母都代表一个串,E出现了三次,找出最长的那个E. 分析:我们知道KMP里面保存的就是前缀和后缀的最 ...
- 什么是method swizzling
其实跟字面的意思很相近.方法的调和.可以去修改oc中两个方法的调用. 这张图看起来会比较形象 20130718230430859.png 就是把两个实现调换具体的做法,首先,用Categroy建立自己 ...
- C语言学习_从VC++6.0开始
前言: C语言是一门博大精深的语言,C语言往往是程序员以及所有软件行业从业者的第一门编程语言. 编程环境: 对于初学者来说,我一开始学习C语言,其实是用的turboc 2.0版本,这个很有历史感,但是 ...
- [2012山东省第三届ACM大学生程序设计竞赛]——n a^o7 !
n a^o7 ! 题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2413 Time Lim ...
- innode 节点
[root@localhost soft]# ls -i tt1 tt2 xx.c [root@localhost soft]# stat tt1 File: `tt1' Size: 4096 Blo ...