从新组织函数(函数相关的重构手法)算法
1.Extract Method(提炼函数)(过长的函数或者须要注释才能让人理解用途的代码,那么就该提炼出来放到一个独立的函数里面)函数
作法:spa
1.创造一个新函数,根据这个函数的意图来命名对象
2.把提炼出来的代码拷贝到新函数里面it
3.仔细检查提炼出来的代码,看看其中是否引用了“做用于限制于原函数”的变量,包括局部变量和原函数参数变量
4.检查是否有“仅做用于被提炼代码段的临时变量,若是有 那么在目标函数中申明为临时变量”重构
5.吧被提炼代码中须要读取的临时变量,当作参数传给目标函数循环
6.在原函数中,被提炼出来的代码段 替换为 对目标函数的调用引用
7.检查被提炼代码段,是否有个局部变量被修改了,若是被修改了看看是否能够处理为一个查询,若是不能,那么就不能原封不动的提炼代码了,参考Split Temporary Variable 而后在提炼,或者用Replace Temp With Query 吧临时变量消灭,再提炼程序
2. Inline Method(内联函数)(有一种状况是该函数没有必要成为一个独立的函数,还有一种状况是若是委托太多,有时候就须要内联了)
作法:
1.肯定不具有多态性,找出全部的调用者,把函数被替换为内联
3.Inline Temp(内联临时变量)(有些临时变量是多余的,那么删掉吧)
4.Replace Temp With Query(用查询替代临时变量,程序用一个临时变量来保存某一表达式的结果,吧这个表达式提炼到一个独立的函数中再把全部表达式 替换为函数的调用,此后新函数就能够被其余使用,,,临时变量的问题在于,只在该函数可见 ,这会驱使你写更长的代码,若是替换为查询,那么状况会好得多)
作法:
找出只被赋值一次的临时变量(C++ 可用const来确认),而后提炼出函数,再用inline temp来处理临时变量
5.Introduce Explaining Variable(引入解释性变量)(把复杂的表达式或者其中一部分的结果放进一个临时变量,以此变量名称来解释表达式的用途,来增长可读性)
6.Split Temporary Variable(分解临时变量)(某个临时变量被赋值超过一次,它既不是循环变量也不用于收集计算结果,那么就该针对每次赋值,建立一个独立,对应的临时变量。保证一个临时变量值承担一个责任)
7.Remove Assignments to Parameters(移除对参数的赋值)(注意传值和转地址的区别)
8.Replace Method with Method Object(以函数对象取代函数)(若是一个大型函数没法用Extract Method 那么就能够吧这个函数放进一个单独的对象,如此一来局部变量就成了对象内的字段,而后在这个类中拆分这个大型函数)
8.Substitute Algorithm(替换算法)(吧每一个算法替换为一个更清晰的算法,如:函数内部大量的if 若是能够用查询 循环来替换,那就替换吧)