选择好变量名的注意事项:
▲ 为变量命名时最重要的考虑事项是:该名字要完全、准确地描述出该变量所代表的事物。
▲ 以问题为导向。一个好名字反映的通常都是问题,而不是解决方案;通常表达的是
▲ “什么(what)”,而不是“如何(how)”。
▲ 变量名的长度应该限定在8到20个字符之间。较长的名字是用于很少用到的变量或者全局变量,而较短的名字则适用于局部变量或者循环变量。
▲ 将类似于Total,Sum,Average,Max,Min,Record,String,Pointer这样的限定词加载名字的最后。
▲ 变量名中断常用对仗词:begin/end, first/last,locked/unlocked, min/max, next/previous, old/new, opened/closed,visible/invisible, source/target, source/destination, up/down
C的命名规则示例
实体 | 描述 |
TypeName | 类型名混合使用大小写,首字母大写 |
GlobalRoutineName() | 公用子程序名混合使用大小写 |
f_FileRoutineName() | 单一模块(文件)私用子程序名用f_前缀 |
LocalVariable | 局部变量混合使用大小写。其名字应该与底层数据无关,而且应该反映该变量所代表的事物 |
RoutineParameter | 子程序参数的格式与局部变量相同 |
f_FileStaticVariable | 模块(文件)变量名前用f_前缀 |
G_GLOBAL_GlobalVariable | 全局变量名以G_前缀和一个能反映定义该变量的模块(文件)的、全部大写的名字开始,如G_SCREEN_Dimensions |
LOCAL_CONSTANT | 单一子程序或者模块(文件)私用的具名常量全部大写 |
G_GLOBALCONSTANT | 全局具名常量名全部大写,并且以G_前缀和一个能反映定义该具名常量的模块(文件)的、全部大写的名字开始 |
LOCALMACRO() | 单一子程序或者模块(文件)私用的宏定义全部大写 |
G_GLOBAL_MACRO() | 全局宏定义全部大写,并且以G_前缀和一个能反映定义该宏的模块(文件)的全部大写名字开头 |
核对表:变量命名
命名的一般注意事项
▲ 名字完整并准确地表达了变量所代表的含义吗?
▲ 名字反映了现实世界的问题而不是编程语言方案吗?
▲ 名字足够长,可以让你无须苦苦思索吗?
▲ 如果有计算值限定符,它被放在名字的最后吗?
▲ 名字中用Count或者Index来代替Num了吗?
为特定类型的数据命名
▲ 循环下标点名字有意义吗?(如果循环下标的长度超出了一两行代码或者出现循环嵌套,那么应该用i,j或者k以外的其他名字吗)?
▲ 所有的“临时”变量都重新命名以更有意义的名字了吗?
▲ 当布尔变量的值为真时,变量名能准确表达其含义吗?
▲ 枚举类型的名字中含有能够表示其类别的前缀或者后缀来吗?例如,把Color_用于Color_Red,Color_Green等了吗?
▲ 具名常量是根据它所代表的抽象实体而不是它所代表的数字来命名的吗?
命名规则
▲ 规则能够区分局部数据、类型数据和全局数据吗?
▲ 规则能够区分类型名、具名常量、枚举类型和变量名吗?
▲ 规则能够在编译器不强制检测只读参数的语言里标识出子程序中的输入参数吗?
▲ 规则尽可能地与语言的标准规则兼容吗?
▲ 名字为了可读性而加以格式化了吗?
短名字
▲ 代码用了长名字吗(除非有必要使用短名字)?
▲ 是否避免只为了省一个字符而缩写名字的情况?
▲ 所有单词的缩写方式都一致吗?
▲ 名字能够读出来吗?
▲ 避免使用容易被看错或者读错的名字吗?
▲ 在缩写对照表里对短名字做出说明了吗?
常见命名问题:你避免使用……
▲ ……容易让人误解的名字吗?
▲ ……有相近含义的名字吗?
▲ ……只有一两个字符不同的名字吗?
▲ ……发音相近的名字吗?
▲ ……包含数字的名字吗?
▲ ……为了缩短而故意拼错的名字吗?
▲ ……英语中经常拼错的名字吗?
▲ ……与标准库子程序名或者预定义变量名冲突的名字吗?
▲ ……过于随意的名字吗?
▲ ……含有难读的字符的名字吗?