零 阅读《重构:改善既有代码的设计》笔记
一 重构是什么?
重构就是改代码,用更整洁、更清晰、更易读、更结构化的代码呈现程序。因为是第一次做项目,加上进度要求,上线的项目代码质量实在不敢恭维,一两个月后看自己写的代码,简直不能入目。这种现象应该属于常态,所以才有了重构的出现。
在阅读自己代码的过程中,经常看见(1)不必要的临时变量,(2)大段的重复代码,(3)又长又臭的长函数,(4)模糊不清的变量名和函数名,(5)缺少注释等等所谓的Bad Smell,不自觉的就想去修改它们。怎样修改这些代码才能提高它们的质量?阅读《重构》一书带给我很大帮助。
二、重构技术之重新组织函数
重新组织函数是最基本最简单的重构技术,是在函数层面处理既有代码。其技巧列举如下:
1、Extract Method(提炼函数)
-你有一段代码可以被组织在一起并独立出来。
-一个函数的本体与名称同样清楚易懂。
-你有一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其他重构手法。
-你的程序以一个临时变量保存某一表的是的运算结构。
-你有一个复杂的表达式。
-你的程序有某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果。
-代码对一个参数进行赋值。
-你有一个大型函数,其中对局部变量的使用使你无法采用Extract Method。
-你想要把某个算法替换为另一个更清晰的算法。
一 重构是什么?
重构就是改代码,用更整洁、更清晰、更易读、更结构化的代码呈现程序。因为是第一次做项目,加上进度要求,上线的项目代码质量实在不敢恭维,一两个月后看自己写的代码,简直不能入目。这种现象应该属于常态,所以才有了重构的出现。
在阅读自己代码的过程中,经常看见(1)不必要的临时变量,(2)大段的重复代码,(3)又长又臭的长函数,(4)模糊不清的变量名和函数名,(5)缺少注释等等所谓的Bad Smell,不自觉的就想去修改它们。怎样修改这些代码才能提高它们的质量?阅读《重构》一书带给我很大帮助。
二、重构技术之重新组织函数
重新组织函数是最基本最简单的重构技术,是在函数层面处理既有代码。其技巧列举如下:
1、Extract Method(提炼函数)
-你有一段代码可以被组织在一起并独立出来。
-将这段代码放进一个独立的函数中,并让函数名称解释该函数的用途。
note:将重复代码或可重用的代码提取出来,并用函数名做功能性说明,正是“函数”“功能”一词(function)的本意。
-一个函数的本体与名称同样清楚易懂。
-在函数调用点插入函数本体,然后移除该函数。
note:对于简介的、耦合性强的代码段,内联使代码可读性更好。
-你有一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其他重构手法。
-将所有对该变量的引用动作,替换为对它赋值的那个表达式本身。
note:减少不必要的开销,使代码更清晰易读。
-你的程序以一个临时变量保存某一表的是的运算结构。
-将这个表达式提炼到一个独立函数中。将这个临时变量的所有引用点替换为对新函数的调用。此后,新函数就可被其他函数使用。
note:将变量用函数值替换,并用函数名做说明性解释,且可复用。
-你有一个复杂的表达式。
-将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式的用途。
note:增加可读性。
-你的程序有某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果。
-针对每次赋值,创造一个独立、对应的临时变量。
note:单一职责。
-代码对一个参数进行赋值。
-以一个临时变量取代该参数的位置。
note:在函数内部,对const变量而言,应将参数值赋给临时变量。
-你有一个大型函数,其中对局部变量的使用使你无法采用Extract Method。
-将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的字段。然后你可以在同一个对象中将这个大型函数分解为多个小型函数。
note:分解长函数,使函数功能清晰。
-你想要把某个算法替换为另一个更清晰的算法。
-将函数本体替换为另一个算法。
note:考虑效率、易读性。
三、小结
本篇随笔只涉及重构最基础的技巧,在编写代码的时候多从这些小处着手,多考虑细节。