6.1 Extract Method (提炼函数)
将代码放进一个独立函数中, 并让函数名称解释该函数的用途
6.2 Inline Method(内联函数)
一个函数的本体(method body)与其名称(method name)同样清楚易懂
在函数插入点插入函数本体,然后移除该函数
6.3 Inline Temp(内联临时变量)
你有一个变量,只被一个简单表达式赋值一次, 而它妨碍了其他重构手法.
将所有对该变量的引用动作, 替换为对它赋值的那个表达式自身.
这条多半是作为 用查询替代临时变量 的一部分使用的.
6.4 Replace Temp With Query(用查询替代临时变量)
你的程序以一个临时变量保存某一表达式的运算结果
将这个表达式提炼到一个独立函数中. 将这个临时变量是所有引用点替换为对新函数的调用.此后,新函数就可以被其他函数使用.
6.5 Introduce Explaining Variable(引入解释性变量)
你有一个复杂的表达式
将该复杂的表达式(或者其中一部分)的结果放进一个临时变量, 以此变量名来解释表达式用途.
表达有可能非常复杂而且难以阅读.临时变量可以帮助你讲表达式分解为必要容易管理的形式.
6.6 Split Temporary Variable(分解临时变量)
你的程序有某个临时变量被赋值超过一次, 他既不是循环变量,也不被用于收集计算结果.
针对每次赋值,创造一个独立,对应的临时变量
6.7Remove Assignment to Parameter(移除对参数的赋值)
代码对一个参数进行赋值
以一个临时变量取代该参数的位置.
- (void)discountInputValue:(int)inputValue quantity:(int)quantity yearToDate:(int)yearTodate{
if (inputValue > 50) {
inputValue -= 2;
}
}
/**
* 以下为重构代码.
* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
*/
- (void)discountInputValue:(int)inputValue quantity:(int)quantity yearToDate:(int)yearTodate{
int result = inputValue;
if (inputValue > 50) {
result -= 2;
}
}
因为有时候参数可能是对另一个对象的引用.
6.8 Replace Method with Method Object(以函数对象取代函数)
你有一个大型函数, 其中对局部变量的使用使你无法采用Extract Method
将这个函数放进一个单独对象中, 如此一来局部变量就成了对象内的字段. 然后你可以在同一个对象中将这个大型函数分解为多个小型函数.
只要将相对独立的代码从大函数中提炼出来, 就可以大大提高代码的可读性.
6.9 Substitute Algorithm (替换算法)
你想把某个函数替换为另一个更清晰的算法
将函数本体替换为另一个算法
解决问题有好几种方法, 我敢打赌其中某些方法回比另一些简单.