曾经在网上看到的一句话:“一个好的程序员往往不需要添加过多的注释,因为他编写的代码就是注释。“一个好的变量名是可读的,易记的和恰如其分的。
如何才能称为好的变量呢?好的变量应该有如下两个特征:
1、容易理解
2、长度在8到20个字符之间。
例如:currentDate和todaysDate就很准确地表达了”当前日期“这一时间概念,而cd或者current这样的变量名就很难让人理解。x、x1、x2这些永远都是坏名字,传统上x是用来表示一个未知量的,如果你不希望你的变量是一个未知量,尽量取一个好一点的名字吧!
很多程序都有表示计算结果的变量:总额、平均值等。如果要用到这样的 限定词如total、sum等,请记得将限定词加到名字最后,这样,变量名中最重要的那部分,能够被最先阅读到,如revenueTotal(总收入)、expenseTotal(总支出)等。但是也有例外,那就是num限定词的位置已经是约定俗成的,num放在变量名开始位置表示一个总数,如
numCustomer表示顾客总数,customerNum表示顾客序号。为了不引起误解,用customerCount代表顾客总数,customerIndex代表顾客序号就更容易理解一些。
变量名中常用对仗词就很容易让人记忆。如begin/end、first/last、lock/unlock、min/max、next/previous、old/new、opened/closed、visible/invisible、source/target、
up/down等。
循环中的变量很多都是约定俗成的,如i、j、k这样的变量一般都是循环内的下标变量,如果一个变量要在循环外使用,那就应该取一个更有意义的名字。
布尔类型的变量也有一定的技巧,如done表示某件事已经完成,完成之前为false,完成之后为true,类似的还有error、found、success、ok。有些程序员喜欢在布尔类型的变量前加is,但是if(isFound)的可读性就不如is(found)好。
关于变量命名的规范,很多语言也有一定的命名规则。
C++的命名规则:
① i和j是整数的下标
② p是指针
③ 常量typedef和预处理宏全部大写
④ 类和其他类型的名字混合大小写
⑤ 变量名和函数名中的第一个单词小写,后续每个单词的首字母大写,如variableOrRoutineName
⑥ 不把下画线用作名字中的分割符,除非用于全部大写的名字以及特定的前缀中
JAVA的命名规则:
① i和j是整数的下标
② 常量全部大写
③ 变量名和函数名中的第一个单词小写,后续每个单词的首字母大写,如variableOrRoutineName
④ 类名首字母和其他单词首字母大写
⑤ 访问子程序使用get和set前缀
有时候变量名太长需要缩写,缩写的一般规则为:
① 使用标准缩写(在字典中常见的缩写)
② 去掉所有非前置元音,如:computer变为cmptr,screen变成scrn,apple变成appl。
③ 去掉虚词如and,or,the等。
④ 使用每个单词的第一个或前几个。
⑤ 保留每个单词第一个和最后一个字母
⑥ 去掉无用后缀,如ing、ed等
缩写过程中应该注意的有:
① 不要用从每个单词中删除一个字符的方式缩写
② 缩写要一致,要么全用No,要么全用Num,不要两者一起用
③ 创建的变量要能读出来,如用xPos而不用xPstn
④ 永远记住,名字对于代码阅读者的意义远比作者更重要
现在说说代码中应该避免的名字:
① 避免使用令人误解的名字或缩写,如Fig and Almond Season缩写成FALSE,会让人误解成false的大写
② 避免使用具有相信含义的名字,如果两个变量名字交换都不会妨碍对程序的理解,那么就该考虑重新命名了。如input和inputvalue两个一起使用
③ 避免使用具有不同含义却有相似名字的变量,如clientRecs和clientReps,它们之间只有一个字母的差异,一不留神就会出错
④ 避免在名字中使用数字,如total1、total2、total3等,如果名字中的数字真的非常重要,请考虑用数组来代替一组单个变量
⑤ 避免在名字中拼错单词,如absense,absend等。
⑥ 避免仅靠大小写来区分变量名,如student,STUDENT。
⑦ 避免使用与变量含义完成无关的名字,如margared和pookie,或者亲戚女朋友的名字。
⑧ 避免在名字中含有易混淆的字符,如1和 l 就很难区分。