代码重构笔记(函数重新组织)

时光怂恿深爱的人放手 提交于 2020-01-14 13:13:31

Inline Temp 内联临时变量

动机:临时变量影响了其他构造方法
当程序有一个临时变量只被赋值一次,而且影响到了其他的重构,那么我将这个变量去除,用赋值给他的表达式来替换临时变量;

确认等式右边的表达式无副作用
然后尝试将临时变量声明为final,确定只赋值一次
替换临时变量

Replace Temp with Query

当临时变量保存一个运算结果或者查询结果,将表达式提取到一个独立函数,然后用函数替代;

优点:这样去除了临时变量不能被其他函数引用导致的多余代码问题

找出临时变量,如果只是一次赋值的变量则可直接提取替代,如果是收集的是循环里面的结果则将整个循环提点。注意:当你的提取代码有副作用时候,记得要用Separate Query from Modifler来切割查询和副作用。(副作用:即会影响数据库的修改类操作或者非当前查询的参数被修改的情况)

Introduce Explaining Variale

当你的表达式复杂难懂时,将其提取出来用自定义命名的临时变量替换

优缺点:让代码变动容易理解,被局限于单个函数内

适合场景:
1.当用函数提取工作量比较大的时候就用引入解释性变量
2.当提取函数代码十分复杂,我们可以先引入解释性变量帮助理解,然后再提取

Remove Addignments to Paramters

移除对参数赋值,当代码对参数赋值时候吗,以一个临时变量取代参数的位置

优缺点:这是好的编码习惯,让你能更清晰java是值传递

注意:提高了代码的清晰度。如果你的语义是引用传递,需要修改对象的修改来进行返回,那你最好把修改的对象进行返回。如果需要返回的值不是一个,那么建议你每个返回值设计一个独立函数。

小技巧:你可以把每个参数都看成final 即是不可重新赋值,但是可以修改内部内容。时刻提醒自己java是值传递

Replace Method with Method Object

用函数对象替代函数,如果有一个大型函数不好分解,参数和临时变量十分多,那把这个函数替换成函数对象把,参数和临时变量作成字段,那么你就很容易将其分解成小函数了

优缺点:这样的话参数和临时变量就十分容易处理,而且不用担心传递的问题,只是工作量就比较偏大了。

做法:
1.创建新类,将原函数的原对象作为一个final字段定义
2.将原函数的参数和临时变量定义为字段
3.定义个传入原对象和参数,临时变量的构造函数
4.创建一个新函数,将原函数复制过来,并将变量替换成字段,进行分解提炼
5.将原函数的返回替换成新对象的新函数调用

Substitute Algorithm

替换算法,将复杂的函数进行分解提炼后,将麻烦的算法替换成一个简单算法

优缺点: 方便修改,在修改前替换算法是有利于后面算法的修改的

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!