《代码大全》之变量名的力量

一,选择好变量名的注意事项

一个好的变量名是可读的、易记的和恰如其分的。可以通过应用多条原则来实现这些目标。

1,最重要的命名注意事项

为变量命名时最重要的考虑事项是,该名字要完全、准确地描述出该变量所代表的事物。获得好名字的一种使用技巧是用文字表达变量所代表的是什么

2,以问题为导向

一个好名字通常表达的是“什么”,而不是“如何”。

3,最适当的名字长度

平均名字长度在 8 到 20 个字符的程序容易调试。当然这并不意味着你应该尽量把变量名控制到这个范围。它强调的是,如果你查看自己写的代码时发现了很多更短的名字,那么你需要认真检查,确保这些名字含义足够清晰

4,变量名对作用域的影响

较长的名字适用于很少用到的变量或者全局变量,而较短的名字则适用于局部变量或者循环变量。

对位于全局命名空间中的名字加以限定词。

5,变量名中的计算值限定词

很多程序都有表示计算结果的变量:总额、平均值、最大值等等。如果你要用类似于 Total、sum、Average 这样的的限定词来修改某个名字,那么请记住把限定词加到名字的最后

规则的例外是 num。numCustomers 表示员工总数,customerNum 表示当前员工的序号。当然最好使用 Count 或 Total 来代表员工的总数,用 Index 来指代某个特定的员工——以避开 num 的例外。

6,变量名中的常用对仗词

  • begin/end
  • first/last
  • locked/unlocked
  • min/max
  • next/previous
  • old/new
  • opened/closed
  • visible/invisible
  • source/target
  • source/destination
  • up/down

二,为特定类型的数据命名

1,为循环下标命名

简单的循环内变量为 i,j,k,这是约定俗成的。

当你要在循环之外继续使用该变量,或者在嵌套循环中使用,或者循环体比较长,你就得为变量取个有意义的名字。

2,为状态变量命名

为状态变量取一个比 flag 更好的名字。标记应该用枚举类型、具名常量,或用作具名常量的全局变量来对其赋值。

3,为临时变量命名

临时变量常被赋予 temp、x 或其他一些模糊且缺乏描述性的名字。用真正的变量代替临时变量。

4,为布尔变量命名

谨记典型的布尔变量名:

  • done 用 done 表示某件事情已经完成。在完成事情之前把 done 设为 false,在完成后设为 true。
  • error 用 error 表示有错误发生。在错误发生之前把变量值设为 false.
  • found 用 found 来表明某个值已经找到了。在一个数组中查找某个值,在文件中搜寻某员工的 ID 等都可以使用。
  • success 或 ok 用该变量来表明一项操作是否成功。

给布尔变量赋予隐含“真/假”含义的名字。类似 done 或 success,其状态要么是 true,要么是 false。

使用肯定的布尔变量名。不要用例如 notFound 之类的。

5,为枚举类型命名

在某些编程语言中,枚举类型的处理很像类(如 Java),比如 Color.red,那么这里的命名直接取就好。倘若不是,则将 red 变为 Color_red 以表明成员来自同一个组。

6,为常量命名

在具名常量时,应该根据该常量所表示的含义,而不是该常量所具有的数值为该抽象事务命名。

三,命名规则的力量

一些解释,略。。

四,非正式命名规则

1,与语言无关的命名规则

  • 区分变量名和子程序名字
  • 区分类和对象
  • 标识全局变量 如,有些时候在全局变量前加 g_ 前缀。
  • 标识成员变量
  • 标识类型声明
  • 标识具名常量
  • 标识枚举类型的元素
  • 在不能保证输入参数只读的语言里标识只读参数
  • 格式化命名以提高可读性

2,与语言相关的命名规则

C 的命名规则

  • c 和 ch 是字符变量
  • i 和 j 是整数下标
  • n 表示某物的数量
  • p 是指针
  • s 是字符串
  • 预处理宏全部大写(ALL_CAPS)
  • 变量名和子程序全部小写(all_lowercase)
  • 下划线(_)用作分隔符:letters_in_lowercase 比 lettersinlowercase 更具可读性。

c++ 的命名规则

  • i 和 j 是整数下标
  • p 是指针
  • 常量和预处理宏全部大写(ALL_CAPS)
  • 类和其它类型的名字混合大小写
  • 变量名和函数名中的第一个单词小写,后续每个单词的首字母大写
  • 不把下划线用作名字的分隔符,除非用于全部大写的名字以及特定的前缀中

Java 的规则

  • i 和 j 是整数下标
  • 常量全部大写并用下划线分隔
  • 类名和接口名中每一个单词的首字母均大写,包括第一个单词
  • 变量名和方法名中第一个单词的首字母小写,后续单词的首字母大写
  • 除用于全部大写的名字之外,不使用下划线作为名字中的分隔符
  • 访问器子程序使用 get 和 set 前缀

五,标准前缀

阅读即可

六,创建具备可读性的短名字

与项目保持一致即可

七,应该避免的名字

  • 避免使用令人误解的名字或缩写
  • 避免使用具有相似含义的名字
  • 避免使用具有不同含义但却有相似名字的变量
  • 避免使用发音相近的名字
  • 避免在名字中使用数字
  • 避免在名字中拼错单词
  • 避免使用英语中尝尝拼错的单词
  • 不要仅靠大小写来区分变量名