前言:
你是否在开发过程中随心所欲的进行变量命名?
作为一个码龄差不多四五年的程序员,在开发过程中常常要面对各种类、变量、函数的命名。 虽然这些年也差不多也逐渐形成了一些个人风格的命名规则,但并没有成一个比较规范的系统,因此很多时候还是比较随心的。
最近看了《代码大全2》中变量名的力量一章,于是把书中的知识点挑出了一些列了出来。
相信,对于有一定经验的程序员,可以帮助重新审视自己的日常编码习惯,从而改正一些错误的习惯;对于那些新手程序员,可以在初期,好好规范自己,从而养成良好的代码风格。
总之,这是一篇干货!
一个好的变量名是可读的,易记的和恰如其分的
通常,对变量的描述就是最佳的变量名
太短,无法传达足够的信息
太长,难写且会使得程序的视觉结构变得模糊不清
较长的名字适用于很少用到的变量或者全局变量,
较短的名字适用于局部变量或者循环变量
不过作为一项防御式编程策略,应尽量避免使用短的变量名
对位于全局命名空间中的名字加以限定词
对于一些表示计算结果的变量:总额,平均值,最大值等,使用类似于:Total、Sum、Average、Max、Min、Record、String、Pointer,这样的限定词来修改某个名字,应当把限定词加到名字的后面。 如:revenueAverage、expenseTotal
一致性可以提高可读性,简化维护工作
把计算的量放到名字后面的规则也有例外。Num限定词的位置已经是约定俗成的。Num放在变量名开始位置表示一个总数。放在结束位置代表一个下标。
通过应用命名规则来提高对仗词使用的一致性,从而提高可读性。
约定俗成的名字:i,j,k
如果变量要在循环之外使用,应取一个更有意义的名字。
谨慎地为循环下标变量命名可以避免产生下标串话(index cross-talk)的常见问题:想用j的时候写了i,想用i的时候却写了j。同时也使得访问数据更加清晰: score[teamIndex][eventIndex]要比score[i][j]给出的信息更多。
为了清楚可见,标记应该用枚举类型、具名常量,或用作具名常量的全局变量来对其赋值,而且其值应该与上面这些量作比较 e.g.
bad:
if(printFlag == 16)
good:
if(reportType == ReportType_Annual)
常用temp
但也可以使用更具描述性的名字进行替代
给布尔变量赋予隐含 真/假 含义的名字
有些程序员(包括我自己)喜欢在布尔变量名前加上is,这种方法优点之一是它不能用于哪些模糊不清的名字:isStatus? 缺点之一是降低了简单逻辑表达式的可读性:if(isFound)可读性略差于if(found)
减少使用如下名字:notFound,notDone… 特别难阅读,尤其是它们被求反
可以通过组前缀,如:Color_、Planet_或者Month_来明确表示该类型的成员都属于一个组。
具名常量时,应该根据该常量所表示的含义,而不是该常量所具有的数值为该抽象事物命名。。 Five = 6.0 就显得很可笑了。
变量名和对象名以小写字母开始
子程序名以大写字母开始
Widget widget
WIDEGE widget
t_Widget widget
Widget aWidget
Widget employeeWidget
- 标识全局变量 g_
- 标识成员变量 m_
- 标识类型声明 t_
- 标识具名常量 c_
- 标识枚举类型元素 增加特定类型的前缀; 如:color_
- 在不能保证输入参数只读的语言里标识只读参数
- 格式化命名以提高可读性 两种常用的方法:大小写&分隔符