javascript代码重构之:给变量取个好名

380 阅读2分钟

最近恰好遇到项目做重构,所以在了解这方面的知识,使重构后的代码变得整洁

以下是给变量取个好名的几条规则

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 = 4const 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);