重复代码

109 阅读2分钟

当在一个以上地方看到看到相同的代码时,就可以考虑将他们合而为一。如果重复的代码具有相同的表达式时,需要做的就是使用提炼函数提炼出相同的代码。如果只是相似但不相同,可以先尝试使用移动语句将相似的部分放在一起然后再提炼。

提炼函数

动机

何时应该把代码放进独立的函数?

将意图与实现分开。当一段代码需要花时间才能理解它的意思时那么就应该将其提炼到一个函数中

做法

无局部变量

当被提炼部分没有依赖于其它作用域的变量时,只需要剪切、粘贴再插入一个函数调用即可

有局部变量

当被提炼部分依赖于其它作用域的变量时,但并不修改它们时,这种情况下我们可以简单的将它们作为参数传给目标函数

对局部变量再赋值

  1. 如果对局部变量的赋值,只发生在别提炼部分,可以将这个变量的声明和代码一起提炼出来
  2. 如果在提炼部分之外的其他部分也使用了这个变量,此时就需要返回修改后的值

移动语句

动机

让存在关联的东西一起出现,可以使代码更容易理解

此项重构手法,通常是用于提炼函数之前,将相关的语句搜集到一处,方便提炼

做法

  1. 确定待移动片段应该搬到哪里
  2. 检查搬运后是否影响正常功能的使用。如果导致功能无法使用,则放弃此重构

在移动代码片段时,通常需要想清楚:本次的调整目标是什么,以及是否可以达到