第二章:Packing Information into Names
本章的核心思想是:将信息打包进名字
选择专业的词汇
首先要选择信息中专业的单词而将一些常用的单词排除在外;其次是注意信息表达的准确。
例子:
class BinaryTree {
int Size();
...
};size指的是树的高度,还是节点数,还是所占的存贮字节呢?
Height(), NumNodes(), or MemoryBytes().更好
寻找更多有专业的单词
Word Alternatives
send deliver, dispatch, announce, distribute, route
find search, extract, locate, recover
start launch, create, begin, open
make create, set up, build, generate, compose, add, new
核心思想:名字的清楚和精确往往比可爱更重要
避免产生temp和retval这样泛泛的名字
为了避免这样的空名字,你需要选择一个能够描述当前实体的值或者是功能的名字。
建议:retval这个名字并没有包含太多信息,请用一个能描述这个变量的值来代替。
tmp并不是在任何场合都不能用的,例如当在一个函数内部,并且生命周期很短时就可以使用它,而且它还可以作为名字的一部分出现。例:tmp_file = tempfile.NamedTemporaryFile()
建议:tmp这个名字只有在短生命周期,并且临时性是它最重要的特性时才能使用
尽量使用具体的名字而不是抽象的名字
例如:DISALLOW_EVIL_CONSTRUCTORS到DISALLOW_COPY_AND_ASSIGN(ClassName)的转变
--run_locally到--extra_logging的转变
通过使用前缀和后缀给一个名字附上更多的信息
一个名字就像是一个微小的注释,如果一个变量是一个测量值,那么将这个单位编码到变量名中是很有帮助的,将其它重要属性通过前缀后缀附加给变量也是很有帮助的,从本质上来讲,只要一些信息对于理解变量和代码是关键性的那么将它添加到名字中。
例如:
Function parameter units Renaming parameter to encode
Start(int delay ) delay → delay_secs
CreateCache(int size ) size → size_mb
ThrottleDownload(float limit) limit → max_kbps
Rotate(float angle) angle → degrees_cw
一个名字应该多长
建议一:当一个变量的作用域很小时,它的名字是可以很短,就像你去短途旅行和长途旅行需要打包的物品的数量不同一样。
例:if (debug) {
map<string,int> m;
LookUpNamesNumbers(&m);
Print(m);
}
建议二:输入一个很长的名字也不是问题,因为再长的名字可以通过编辑器或者是IDE自带的文字完成功能进行变量名的书写。
建议三:使用缩写,使用缩写的首要原则是:如果一个新来的团队成员能够读懂这个缩写的意思,那么这个缩写就可以使用了
建议四:扔掉不需要的单词,如果一些单词被扔掉后仍然不影响大意,则扔掉它
例:ConvertToString()用ToString()来代替
原则五:使用命名格式来打包特殊信息,通过使用下划线、破折号和首字母大写的方式也可以将一些信息打包进名字,对于不通的实体采用不同的命名格式,就会获得IDE中语法高亮的效果,而使代码易于阅读。
例:类的名字首字母大写ClassName,宏定义 MACRO_NAME,常量kConstantName 类中变量offset_
不论使用什么约束,都要从开始坚持到最后。
小结:
这一章主要讲了怎样来命名,怎样将信息打包进名字里,使阅读代码的人能够从名字中抽取出一些有用的信息。