《重构 改善既有代码的设计》学习笔记 2 -- Extract Method(提炼函数)
2016-02-20 21:32
501 查看
重构的手法中,很大一部分是对函数进行整理,使之更恰当地包装代码。
问题来源:
过长函数。
这些过长的函数,往往包含太多信息,这些信息又被函数错综复杂的逻辑掩盖,不易鉴别。
解决方案:
使用Extract Method(提炼函数),把一段代码从原先函数中提取出来,封装成一个单独函数中。
困难:
处理局部变量。
做法:
1. 封装新函数:创造一个新函数,并根据函数的意图来对它命名。函数以“做什么”来命名,而不是“怎么做”。
2. 将提炼出的代码从源函数复制到新建的目标函数当中。
3. 仔细检查提炼出的代码,看看其中是否包含源函数的局部变量和参数。
4. 检查是否有“仅用于被提炼代码段”的临时变量。 若有,在目标函数中将它们声明为临时变量。
5. 检查被提炼代码段, 看看是否有任何局部变量的值被改变。
如果一个临时变量值被修改了,看看是否可以将被提炼代码段处理为一个查询,并将结果赋值给相关变量。
如果很难这样做,或如果被修改的变量不止一个,你就不能仅仅将这段代码原封动提炼出来。 你可能需要先使
用分离临时变量(Split Tempory Variable),然后再尝试提炼;也可以使用以查询取代变量(Replace Temp
with Query)将临时变量消灭掉。
6. 将被提炼代码段中需要读取的局部变量,当作参数传给目标函数。
7. 处理完所有局部变量之后,进行变异
8. 在源函数中,将被提炼代码段替换为对目标函数的调用。
9. 再次编译,测试。
问题来源:
过长函数。
这些过长的函数,往往包含太多信息,这些信息又被函数错综复杂的逻辑掩盖,不易鉴别。
解决方案:
使用Extract Method(提炼函数),把一段代码从原先函数中提取出来,封装成一个单独函数中。
困难:
处理局部变量。
做法:
1. 封装新函数:创造一个新函数,并根据函数的意图来对它命名。函数以“做什么”来命名,而不是“怎么做”。
2. 将提炼出的代码从源函数复制到新建的目标函数当中。
3. 仔细检查提炼出的代码,看看其中是否包含源函数的局部变量和参数。
4. 检查是否有“仅用于被提炼代码段”的临时变量。 若有,在目标函数中将它们声明为临时变量。
5. 检查被提炼代码段, 看看是否有任何局部变量的值被改变。
如果一个临时变量值被修改了,看看是否可以将被提炼代码段处理为一个查询,并将结果赋值给相关变量。
如果很难这样做,或如果被修改的变量不止一个,你就不能仅仅将这段代码原封动提炼出来。 你可能需要先使
用分离临时变量(Split Tempory Variable),然后再尝试提炼;也可以使用以查询取代变量(Replace Temp
with Query)将临时变量消灭掉。
6. 将被提炼代码段中需要读取的局部变量,当作参数传给目标函数。
7. 处理完所有局部变量之后,进行变异
8. 在源函数中,将被提炼代码段替换为对目标函数的调用。
9. 再次编译,测试。
相关文章推荐
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- Sql Server中REPLACE函数的使用
- PowerShell函数简明教程