重构 改善既有代码的设计
一、提炼函数(P106)
1. 什么是提炼函数:
- 浏览一段代码,理解其作用,并且发现这段代码可以提取出来
- 将这段代码放进一个独立函数中,并让函数名称解释该函数的用途
2. 什么时候需要提炼函数:
- 函数过长
- 难以理解,你需要花时间浏览一段代码才能弄清它到底在干什么
3. 提炼函数的注意点:
- 写非常小的函数,不必担心短函数的大量调用会影响性能
- 重点关注函数的命名,函数的注释往往会提供一个好名字
- 函数名的长度并不重要,关键是将函数的意图与实现分离
4. 如何提炼函数:
- 找出需要提炼成函数的代码片段
- 创建一个新函数,并对这个函数名实现意图化表达(以它“做什么”来命名,而不是以它“怎样做”命名)
- 将需要提炼的代码片段复制一份到新函数中
- 对提炼函数的变量进行处理(参照下方 -- 提炼函数变量处理)
- 将原函数的代码片段注释,并在此处进行提炼函数的调用
- 对函数功能进行测试
- 删除注释掉的代码片段
5. 提炼函数变量的处理:
-
不存在变量作用域的问题
- 如果提炼出的新函数嵌套在原函数内部,不需要进行处理
- 如果提炼出的新函数不需要用到原函数的变量,不需要进行处理
-
存在变量作用域的问题(提炼函数引用了作用域限于原函数,在提炼出的新函数访问不到的变量)
- 这些作用域限于原函数的变量通常为局部变量或原函数的参数,可以作为参数传递给提炼函数
- 如果变量是在提炼部分之外声明但只在提炼函数中被使用,就把变量声明也搬移到提炼函数中去
- 如果变量传递给提炼函数,并且变量值被修改了,看看是否能够将提炼函数处理为一个查询,并将返回值赋值给相关变量
- 如果提炼部分被赋值的局部变量太多,就需要使用 “分解临时变量” 或 “以查询取代临时变量“ 进行处理,然后再尝试提炼。
6. 涉及知识点
- 以查询取代临时变量(P178)
- 拆分变量(P240)
- 内联变量(P123)
- 将查询函数和修改函数分离(P306)
转载自:https://juejin.cn/post/7159511400736538660