最近恰好遇到项目做重构,所以在了解这方面的知识,使重构后的代码变得整洁
以下是给变量取个好名的几条规则
1、名副其实,有准确意义
- 变量、函数、或类的名称应该已经答复了所有的大问题。告诉你它问什么存在,做什么事情,该怎么用,如果需要注释补充,就不是名副其实,有准确意义
// bad
let d; // 消逝的事件,以日记
// good
let elapsedTimeInDay
- 代码的命名不应该简洁,而是准确意义,不模糊,上下文能在代码中被明确体现。 比如开发一扫雷游戏,盘面是单元格列表,每个单元格是一个数组,单元格零下标是一种状态值,为4表示已标记
// bad
const getThem = () =>{
const list1 = [];
theList.forEach(one => {
if(one[0] === 4){
list1.push(one)
}
})
return list1
}
// good
const STATUS_VALUE = 0;
const FLAGGED = 4;
const getFlaggedCells = () =>{
const flaggedCells = [];
gameBoard.forEach(cell => {
if(cell[STATUS_VALUE] === FLAGGED){
flaggedCells.push(cell)
}
})
return flaggedCells
}
2、避免误导
- 使用小写字母i和大写字母O作为变量名
- 堤防使用不同之处较小的命名。如 XYZControllerForEfficientHandlingOfStrings和XYZControllerForEfficientStorageOfStrings
3、做有意义的区分
- 如果名称必须相异,其意思也应该不同
// bad
const copyCharts = (a1,a2) =>{
a1.forEach((one,index) => {
a2[index] = one
})
}
// good
const copyCharts = (source,destination) =>{
source.forEach((chart,index) => {
destination[index] = chart
})
}
- 要区分名称,就要以读者能鉴别不同之处的方式来区分。
// bad
getUserInfo();
getClientData();
getCustomerRecord();
// good
getUser();
- 废话都是冗余。 Variable 一词用于不应当出现在变量中。Table 一词永远不应当出现在表名中。 NameString 会比 Name 好吗?难道 Name 会是一个浮点数不成?
- 如果缺少明确约定,变量 moneyAmount 就与 money 没区别,customerInfo 与 customer 没区别, accountData 与 account 没区别,theMessage 与 messsage 没区别。
4、使用可搜索的名称
单字母名称和数字很难在一大篇文字中找出来,若变量或常量可能在代码中多处使用,则应赋其以便于搜索的名称
不好
// bad
for(let j= 0;j<34;j++){
s += (t[j]*4)/5
}
// good
let realDaysPerIdealDay = 4;
const WORK_DAYS_PER_WEEK = 5;
const NUMBER_OF_TASKS = 34;
let sum = 0;
for(let j=0;j < NUMBER_OF_TASKS; j++){
let realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
let realTaskWeeks = realTaskDays / WORK_DAYS_PER_WEEK;
sum += realTaskWeeks;
}
5、添加有意义的语境
// bad
const addrFirstName;
const addrLastName;
const addrState;
// good
const address = {
firstName: '',
lastName: '',
state: '',
};
6、不要添加没必要的上下文
如果你的类名称/对象名称已经说明了它们是什么,不要在(属性)变量名里重复。
// bad
const Car = {
carMake: 'Honda',
carModel: 'Accord',
carColor: 'Blue'
};
function paintCar(car) {
car.carColor = 'Red';
}
// good
const Car = {
make: 'Honda',
model: 'Accord',
color: 'Blue'
};
function paintCar(car) {
car.color = 'Red';
}
7、使用解释性的变量
// bad
const cityStateRegex = /^(.+)[,\\s]+(.+?)\s*(\d{5})?$/;
saveCityState(cityStateRegex.match(cityStateRegex)[1],cityStateRegex.match(cityStateRegex)[2]);
// good
const cityStateRegex = /^(.+)[,\\s]+(.+?)\s*(\d{5})?$/;
const match = cityState.match(cityStateRegex)
const city = match[1];
const state = match[2];
saveCityState(city, state);