《代码大全》阅读笔记一——变量名的力量
最近我在王建民老师的推荐下,开始阅读《代码大全2》这本书。
在打开这本书的封面后,我先观看了这本书收到的赞誉,有人称这本书是程序员可以带到孤岛上的唯一一本书。如果想要写出好程序或者想要带领别人写出好程序,这本书都是值得我们去读一读,通过别人的赞誉可以看出这本书在软件工程领域的江湖地位。
我在作者的阅读建议下,首先阅读了第十一章变量名的力量。在我看到这个标题的第一眼,其实对这个标题有些疑问:变量名还能有力量?在我阅读完这章之后,我确确实实感受到了变量名的力量。一个好的变量名不仅可以美化我们的代码界面,还能降低我们编写代码的难度以及我们阅读代码的难度。
本章节主要介绍了五个小模块,分别为:命名的一般注意事项、为特定类型的数据命名、命名规则、短名字与常见的命名问题。
在第一个小模块——命名的一般注意事项中,作者提到了最重要的命名注意事项为:
变量命名名字要完全、准确地描述出该变量所代表的事物,一般来说对变量的描述就是最佳的变量名,例如
numberOfPeopleOnTheUsQlympicTeam//美国奥林匹克代表团成员数量 numberOfSeatsInTheStadium//运动场上座椅的数量 rate //利率 interestRate//当前利率
好的变量名的最大特征就是一眼就能让人理解该变量名所表达的意思
以问题为导向:在处理不同领域的相关问题时,变量名的选取就要有所不同,比如说在财务软件里面,calcVal的效果要比sum号
最适当的名字长度:变量名平均为10-16个字符时最容易调试,9-20个字符也可
变量名中的计算值限定词:许多表示计算结果的变量:总额、平均值、最大值等,通常要用Total、Sum、Average、Max、Min、Record、String、Pointer等限定词来修饰某个名字,一般要把限定词放在名字的最后 方便我们来阅读。比如 revenueTotal(总收入)、expenseTotal(总支出)等类似情况,还有一些情况例外;Num放在前面表示总数,NumCustomers表示员工的总数;Num放在后面表示位置的下表:CustomerNum表示当前员工的序号。
下面是在变量名命名中经常使用的对仗词
begin/end
frist/last
locked/unlocked
min/max
next/previous
old/new
opened/closed
visible/invisible
source/target(来源/目标)
source/destination(来源/目的)
up/down
为特定类型的数据命名
一、为循环下标命名
在为循环下标命名时,我们一般用i,j,k等常见的命名符号,但是如果该变量在循环之外也要使用,则可以用recordCount等名字来代替
recordCount=0; while(moreScores()) { score[recordCount]=GetNextScore(); recordCount++; }
在出现多个循环嵌套的情况下,单纯的使用i,j,k可能会导致读者忘记该变量本来的含义,容易给读者带来误解。
如果想在循环里面使用i,j,k这些字符,就不要在循环外面使用,避免造成误解
二、为状态变量命名
一般我们会在程序里面定义一个状态变量flag来进行条件的判断,但如果出现多个状态变量时,我们需要命名不同的状态变量,类似 dataReady等
三为布尔变量命名
典型的布尔变量名
done 表示某件事已经完成
error 表示有错误发生
found 表示某个值已经找到了
success或者ok 表示某一操作是否成功
有些程序员还会在这些变量名前加上Is IsDone IsError等更形象的命名
命名规则
命名规则应该能够区分局部数据、类数据和全局数据。他们还应当可以区分类型名、具名常量、枚举类型和变量名。
为什么会有命名规则呢?
它可以要去我们按规则办事,减少名字的增生,有助于在项目之间传递知识、有助于我们在新项目里面快速地学习代码,弥补编程语言的不足,强盗相关变量之间的关系。
比如说要区分对象和类:通过大写字母开头来区分类型和变量
java的命名规则:
i和j是整数下标
常量全部大写并用下划线分隔
类名和接口名的第一个单词的首字母均大写,后许单词的首字母大写——ClassOrInterFaceName
变量名和方法名的第一个单词的首字母小写,后许单词的首字母大写——variableOrRoutineName
除用于全部大写的名字之外,不适用下划线作为名字的分隔符
访问器子程序使用get和set前缀
短名字与常见的命名问题
按着上文所写的规范来命名变量名,有时会显得太长难写,这是可以进行缩写
缩写的几个原则:
使用标准缩写
去掉所有非前置元音(computer变成cmptr,screen变成scrn,apple变成appl,integer变成intgr)
去掉虚词and or the
去掉每个单词的第一个或前几个字母
等
应该避免的名字:
避免使用令人误解的名字或缩写
避免使用具有相似含义的缩写
避免使用具有不同含义但却有相似名字的变量
避免使用发音近似的名字
避免在名字中使用数字
避免在名字中拼错单词
避免使用英语中常常拼错的单词
不要仅靠大小写来区分变量名
要点:
1.好的变量名是提高程序可读性的一项关键要素。对特殊种类的变量,比如循环下标和状态变量,需要加以特殊的考虑
2.名字要尽可能地具体。那些太模糊或者太通用以至于能够用于多种目的的名字通常是不太好的
3.命名规则应该能够区分局部数据、类数据和全局数据。他们还应当可以区分类型名、具名常量、枚举类型和变量名。
4.无论做哪种类型的项目,你都应该采用某种变量命名规则。你所采用的规则的种类取决于你的程序的规模,以及项目成员的人数
5.代码阅读的次数远远多于编写的次数。确保你所取的名字更侧重于阅读方便而不是编写方便