代码简洁之道
# 介绍
本文是对其的翻译。
不必严格遵守本文的所有原则,有时少遵守一些效果可能会更好,具体应根据实际情况决定。这是根据《代码整洁之道》作者多年经验整理的代码优化建议,但也仅仅只是一份建议。
软件工程已经发展了 50 多年,至今仍在不断前进。现在,把这些原则当作试金石,尝试将他们作为团队代码质量考核的标准之一吧。
最后你需要知道的是,这些东西不会让你立刻变成一个优秀的工程师,长期奉行他们也并不意味着你能够高枕无忧不再犯错。千里之行,始于足下。我们需要时常和同行们进行代码评审,不断优化自己的代码。不要惧怕改善代码质量所需付出的努力,加油。
# 1. 变量
点击展开
# 使用有意义,可读性好的变量名
反例:
var yyyymmdstr = moment().format("YYYY/MM/DD");
1
正例:
var yearMonthDay = moment().format("YYYY/MM/DD");
1
# 使用 ES6 的 const 定义变量
反例中使用"var"定义的"常量"是可变的。
在声明一个常量时,该常量在整个程序中都应该是不可变的。
反例:
var FIRST_US_PRESIDENT = "George Washington";
1
正例:
const FIRST_US_PRESIDENT = "George Washington";
1
# 对功能类似的变量名采用统一的命名风格
反例:
getUserInfo();
getClientData();
getCustomerRecord();
1
2
3
2
3
正例:
getUser();
1
# 使用易于检索名称
我们需要阅读的代码远比自己写的要多,使代码拥有良好的可读性且易于检索非常重要。阅读变量名晦涩难懂的代码对读者来说是一种相当糟糕的体验。 让你的变量名易于检索。
反例:
// 525600 是什么?
for (var i = 0; i < 525600; i++) {
runCronJob();
}
1
2
3
4
2
3
4
正例:
// Declare them as capitalized `var` globals.
var MINUTES_IN_A_YEAR = 525600;
for (var i = 0; i < MINUTES_IN_A_YEAR; i++) {
runCronJob();
}
1
2
3
4
5
2
3
4
5
# 使用说明变量(即有意义的变量名)
反例:
const cityStateRegex = /^(.+)[,\\s]+(.+?)\s*(\d{5})?$/;
saveCityState(
cityStateRegex.match(cityStateRegex)[1],
cityStateRegex.match(cityStateRegex)[2]
);
1
2
3
4
5
2
3
4
5
正例:
const ADDRESS = "One Infinite Loop, Cupertino 95014";
var cityStateRegex = /^(.+)[,\\s]+(.+?)\s*(\d{5})?$/;
var match = ADDRESS.match(cityStateRegex);
var city = match[1];
var state = match[2];
saveCityState(city, state);
1
2
3
4
5
6
2
3
4
5
6
# 不要绕太多的弯子
显式优于隐式。
反例:
var locations = ['Austin', 'New York', 'San Francisco'];
locations.forEach((l) => {
doStuff();
doSomeOtherStuff();
...
...
...
// l是什么?
dispatch(l);
});
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
正例:
var locations = ['Austin', 'New York', 'San Francisco'];
locations.forEach((location) => {
doStuff();
doSomeOtherStuff();
...
...
...
dispatch(location);
});
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 避免重复的描述
当类/对象名已经有意义时,对其变量进行命名不需要再次重复。
反例:
var Car = {
carMake: "Honda",
carModel: "Accord",
carColor: "Blue",
};
function paintCar(car) {
car.carColor = "Red";
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
正例:
var Car = {
make: "Honda",
model: "Accord",
color: "Blue",
};
function paintCar(car) {
car.color = "Red";
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 避免无意义的条件判断
反例:
function createMicrobrewery(name) {
var breweryName;
if (name) {
breweryName = name;
} else {
breweryName = "Hipster Brew Co.";
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
正例:
function createMicrobrewery(name) {
var breweryName = name || "Hipster Brew Co.";
}
1
2
3
2
3
# 2. 函数
编辑 (opens new window)
上次更新: 2022/06/16, 10:52:37