11.1 选取好变量名的注意事项
最重要的命名注意事项
- 容易理解,事实上它们都不需要什么解释,最好从字面就能理解
- 有些名字太长,长的很不实用,不过后面会讲到长度的问题
以问题为导向
- 一个好记的名字反映的通常都是问题,而不是解决方案
最适当的名字长度
当变量名的平均长度在10到16个字符的时候,调试程序所花费的力气最小,平均长度在8到20个字符的程序也几乎同样容易调试;意思就是名字太短时,就要检查一下变量名是否能准确表示变量的含义
变量名对作用域的影响
- 较长的名字适用于很少用到的变量或这全局变量,而较短的名字则适用于局部变量或者循环变量
- 对位于全局命名空间中的名字加以限定词
变量名中的计算值限定词
- 对于类似于Total、Sum、Average、Max、Min、Record、String、Pointer这样的限定词来修饰某个名字的时候,请记住把这些词放在名字的最后,因为变量名中的主要含义部分应该放在最前面
- num这个词约定俗成的规则:Num放在变量名的开始位置代表一个总数;num放在变量名的结束位置代表一个下标;为了避免num带来的麻烦,一般用total或者count来代表员工总数,用index来代表下标;
变量名中的常用对仗词
- begin/end
- first/last
- locked/unlocked
- min/max
- next/previous
- old/new
- opened/closed
- visible/invisible
- source/target
- source/destination
- up/down
为特定类型的数据命名
- 为循环下标命名:i、j、k是约定俗成地用于循环的下标,但如果用到的循环较多,为了避免错误使用i、j、k,最好命名为有具体语义的变量名
- 为状态变量命名:表示flag的变量最好不要有flag这个词,而是用枚举变量或具名常量为这个状态变量赋值的时候来表明它的状态
- 为临时变量命名:警惕临时变量,其实所有的变量都是临时变量,避免启用temp等无意义的临时变量,因为你之所以用这个变量名的可能原因是因为你没有真正理解你要定义的变量的真正含义
- 为布尔变量命名:常用布尔变量名done表示某事件已经完成;error表示有错误发生;found表示某个错误被找到;success或ok表示某个事件成功;最好不要用status来定义,因为语义不明确;使用肯定的布尔变量名
- 为枚举类型命名:为成员命名时,通常使用组前缀;为枚举本身的名字命名时,可以全部大写或者加入e_的前缀等,但本书采用的是大小写混合的命名方式
- 为常量命名:具名常量命名是表示该常量的意义,而不是该常量的数值
11.3 命名规则的力量
为什么要有命名规则
- 要求你更多地按规矩行事;通过做一项全局决策而不是做许多局部决策,你可以集中精力关注代码更重要的特征
- 有助于在项目间传递知识;名字的相似性让你更容易、更自信的理解那些不熟悉的变量原本该做什么
- 有助于你在新项目中更快速的学习代码
- 强调相关变量之间的关系:当你用的不是像c++或java这种面向对象的编程语言的时候,你可以通过在变量之间加前缀或后缀表明这些变量之间的相关性
何时采用命名规则
- 当多个程序员合作开发一个项目时
- 当你计划把一个程序转交给另一位程序员来修改和维护的时候(这几乎总是会发生)
- 当你所在组织中的其他程序员评估你写的程序的时候
- 当你写的程序规模太大,以至于你无法在脑海里同时了解事情的全貌,而必须分而治之的时候
- 当在一个项目中存在一些不常见的术语,并且你希望在编写代码阶段使用标准的术语或者缩写的时候
- 当你写的程序生命期足够长,长到你可能会把它搁置几个星期或几个月之后又重新启动有关该程序的工作时
- 当在一个项目中存在一些不常见的术语,并且你希望在编写代码阶段使用标准的术语或者缩写的时候
正式程度
对于微小的、用完即弃的项目而言,实施严格的规则可能就太没有必要了;对于多人协作的大型项目而言,正式命名规则都提高可读性的有效手段