《编写可读代码的艺术》笔记

1. 代码应该易于理解

好的代码,应该能让人易于理解。

理解难度指的是别人读懂你的代码所需的时间。

读懂指的是,能对代码进行修改和扩展,并保持原有功能不变。

易于理解的代码也易于测试,集成,模块化和扩展。

从提高编码能力来看:程序员应该以写出易于理解的代码为核心目标。

2. 把信息装到名字中

2.1 选择专业的词, 不要空洞

get 这个词很抽象,应该使用 download fetch 等更具有明显指向的词。

下表是一个建议:

单词更多选择
senddeliver, dispatch, announce, distribute, route
findsearch, extract, locate, recover
startlaunch, create, begin, open
makecreate, set up, build, generate, compose, add, new

关键思想:清晰精确比装可爱要好

2.2 避免使用泛泛的名字

例如 tmpretval 这种空洞的词语不要使用。

tmp 这个名字只应用于短期存在且临时性为其主要存在因素的变量。

i j k 经常被应用于迭代器,但是应该优先考虑比这些变量更为贴切的命名。

2.3 使用具体的名字代替抽象的名字

例如 ServerCanStart(),如果它是检测服务是否可以监听某个给定的端口的话,那么就应该声明为 CanListenOnPort()

例子: run_locally

如果我们有个命令行标识叫 run_locally,那么很难推断出它究竟有什么用处,可能需要在本地运行的时候使用它?但不明白为什么使用它。

假如 run_locally 是用于输出日志,那么就应该把它改成 extra_logging ,如果 run_locally 不仅做这个工作怎么办呢?假如说它还承担了建立和使用一个本地数据库的工作。

那么就应该 新建另一个标志 use_local_database

2.4 为名字附带更多信息

为你的名字带上一些具体的信息,比如说变量的 内在格式,和变量的 单位

1
string id;  // Example: "af84ef845cd8"

如上,如果这个变量的格式很重要,那么就应该在名字附上 hex_id

这里指的就是变量的 内在格式,而不是类似匈牙利命名法的变量的类型。

有时候单位也是很重要的,那么就应该加上单位。

1
2
3
4
var start_ms = (new Date()).getTime();

var elapsed_ms = (new Date()).getTime() - start;
document.writeln("load time was: " + elapsed + " seconds");

2.5 名字的长度

  1. 大作用域采用较长名称,小作用域采用短名称
  2. 使用快捷键来快速输入长名字和使用名字自动补全
  3. 不要使用大家都不认得的首字母缩写词
  4. 丢掉没用的词

2.6 利用名字的格式来传递含义

比如说大驼峰是类,小驼峰是变量等等;格式可以指明一个名字的类型。