Simonzhangs' blog Simonzhangs' blog
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • JS设计模式总结
  • 《Vue》
  • 《React》
  • 《TypeScript 从零实现 axios》
  • TypeScript
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • apple music
  • extension
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Simonzhangs

前端学习探索者
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • JS设计模式总结
  • 《Vue》
  • 《React》
  • 《TypeScript 从零实现 axios》
  • TypeScript
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • apple music
  • extension
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 网站
  • 常用的前端轮子
  • 有意思的网站
  • 代码简洁之道
    • 介绍
    • 1. 变量
      • 使用有意义,可读性好的变量名
      • 使用 ES6 的 const 定义变量
      • 对功能类似的变量名采用统一的命名风格
      • 使用易于检索名称
      • 使用说明变量(即有意义的变量名)
      • 不要绕太多的弯子
      • 避免重复的描述
      • 避免无意义的条件判断
    • 2. 函数
  • 收藏夹
simonzhangs
2022-06-06
目录

代码简洁之道

# 介绍

本文是对其的翻译。

不必严格遵守本文的所有原则,有时少遵守一些效果可能会更好,具体应根据实际情况决定。这是根据《代码整洁之道》作者多年经验整理的代码优化建议,但也仅仅只是一份建议。

软件工程已经发展了 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

正例:

getUser();
1

# 使用易于检索名称

我们需要阅读的代码远比自己写的要多,使代码拥有良好的可读性且易于检索非常重要。阅读变量名晦涩难懂的代码对读者来说是一种相当糟糕的体验。 让你的变量名易于检索。

反例:

// 525600 是什么?
for (var i = 0; i < 525600; i++) {
  runCronJob();
}
1
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

# 使用说明变量(即有意义的变量名)

反例:

const cityStateRegex = /^(.+)[,\\s]+(.+?)\s*(\d{5})?$/;
saveCityState(
  cityStateRegex.match(cityStateRegex)[1],
  cityStateRegex.match(cityStateRegex)[2]
);
1
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

# 不要绕太多的弯子

显式优于隐式。

反例:

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

正例:

var locations = ['Austin', 'New York', 'San Francisco'];
locations.forEach((location) => {
  doStuff();
  doSomeOtherStuff();
  ...
  ...
  ...
  dispatch(location);
});
1
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

正例:

var Car = {
  make: "Honda",
  model: "Accord",
  color: "Blue",
};

function paintCar(car) {
  car.color = "Red";
}
1
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

正例:

function createMicrobrewery(name) {
  var breweryName = name || "Hipster Brew Co.";
}
1
2
3

# 2. 函数

编辑 (opens new window)
上次更新: 2022/06/16, 10:52:37
有意思的网站

← 有意思的网站

最近更新
01
一些有意思的类比
06-16
02
the-super-tiny-compiler解析
06-06
03
计算机编译原理总概
06-06
更多文章>
Theme by Vdoing | Copyright © 2021-2022
蜀ICP备2021023197号-2
Simonzhans | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
  • 飙升榜
  • 新歌榜
  • 云音乐民谣榜
  • 美国Billboard榜
  • UK排行榜周榜