神秘命名

109 阅读2分钟

整洁代码最重要的一步就是取一个好名字,可以清晰的表达自己的功能和用法。改名是最常用的重构手法,包括:改变函数声明、变量改名、字段改名等

改变函数声明

函数是我们将程序拆分成小块的主要方式。函数声明则展示了如何将这些小块组合在一起工作,可以说,它们就是软件系统的关节。对于这些关节,首当其冲的就是它们的名字。一个好的名字可以让我一眼看出函数的用途,而不必查看起实现代码。有一个改进函数名字的好办法:先写一句注释描述这个函数的用途,再把这个注释变成函数的名称。

做法

根据旧函数被使用的范围可以有两种方法,一种是简单方法,一种是迭代式做法

简单方法

当函数被调用的范围小时可以使用简单方法。按照我的理解就是不需要花很长时间修改的就可以一次改完的,例如:同一个页面被多次调用的函数

迭代式做法

比如有一个函数如下:

function circum(radius){
  return 2*Math.PI*radius
}

同时它被几百个地方调用,现在想把它的名称改为circumference,此时如果采用简单方法的话,就必须一次性修改所有的调用者。

而迭代式做法的做法则是:

先提炼出一个新的函数

function circumference(radius){
  return 2*Math.PI*radius
}

然后在旧函数中内联

function circum(radius){
  return circumference(radius)
}

再逐步修改调用就函数的地方

如果想沿用旧函数名称,可以先给新函数起一个易于搜索的临时名字。改完后在对临时名字进行替换

变量改名

如果要改名的变量只作用于一个作用域时,直接找到变量的所有引用,修改过来就好了。如果变量被广泛使用,可以考虑运用封装变量将其封装起来。找出所有使用该变量的代码,逐一修改,再进行测试 例如:

let name = 'john'

// 有些地方读取它
result = `My name is ${name}`

// 有些地方修改它
name = person['name']

我们就可以对它进行适当的封装

function getName(){  // 读
  return name
}

function setName(data){ // 写
    name = data
}

result = `My name is ${getName()}`
setName(person['name'])

常量改名

const country = 'US'

// 改名成countryName
const countryName = 'US'
const country = countryName

字段改名

  1. 如果记录的作用域较小,可以直接修改所有改字段的代码,然后测试。后续步骤就可以跳过
  2. 如果记录还没有封装,先使用封装记录
  3. 在对象内部对私有字段改名,调整内部访问该字段的函数
  4. 测试