# 第二章 把信息装到名字里
# 选择专业的词
- 避免使用过于通用的动词如"do"、"run"、"make"
- 根据上下文选择更精确的词汇:
- 获取数据:fetch/retrieve > get
- 解析数据:parse > read
- 查找元素:find/search > look
# 避免泛泛的名字
- 避免使用tmp、data、info等无意义名称
- 示例改进:
- tempFile → uploadTempFile
- data → userInputData
- retval → parsedJsonResult
# 用具体的名字代替抽象的名字
- 将抽象概念转化为具体实现:
- ServerCanStart() → CanListenOnPort(8080)
- DiskSpace() → FreeDiskSpaceInMB()
- ProcessData() → DecryptAndValidateJson()
# 使用前缀或者后缀来给名字附带更多信息
- 添加单位信息:
- timeout → timeout_ms
- size → size_kb
- 添加类型信息:
- name → name_str
- count → count_int
# 决定名字的长度
- 作用域规则:
- 小作用域(1-5行):短名称(i, j)
- 中等作用域:描述性名称(userIndex)
- 大作用域:完整描述(currentActiveUserIndex)
# 利用名字的格式来表达含义
- 常量:ALL_CAPS_WITH_UNDERSCORES
- 类名:PascalCase
- 函数名:camelCase
- 私有变量:_leadingUnderscore
# 总结
本章唯一的主题是:把信息塞入名字中。这句话的含义是,读者仅通过读到名字就可以获得大量信息。
下面是讨论过的几个小提示:
- 使用专业的的单词——例如,不用 Get ,而用 Fetch 或者 Download 可能会更好,这由上下文决定。
- 避免空泛的名字,像 tmp 和 retval ,除非使用它们有特殊的理由。
- 使用具体的名字来更细致地描述事物——ServerCanStart() 这个名字就比 CanListenOnPort() 更不清楚。
- 给变量名带上重要的细节——例如,在值为毫秒的变量后加上 _ms。
- 为作用域大的名字采用更长那个的名字——不要用让人费解的一个或两个字母的名字来命名。
- 有目的的使用大小写、下划线