1. 选择好的变量名称
这好像是一个老生常谈的问题,但是code complete解析的非常细腻,还是让我们用代码来领会吧。看下面这段java代码:
x = x - xx;
xxx = aretha + SalesTax( aretha );
x = x + LateFee( x1, x ) + xxx;
x = x + Interest( x1, x );
我就一个问题,你能读懂么?这样的代码给你让你修改,你作何感受。程序命名完全没有表达出它的用途,类型,和属性。
一段java优秀的代码如下:
balance = balance - lastPayment;
monthlyTotal = NewPurchases + SalesTax( newPurchases );
balance = balance + LateFee( customerID, balance ) + monthlyTotal;
balance = balance + Interest( customerID, balance );
完成同样的功能下面这段代码明显可读性更高,更容易记住。这个例子对变量命名问题的重要性阐述的很清楚。好的变量名字至少要遵守一个原则能表示出它是什么,注意是表达出what而非how。例如对于记录一个员工信息的记录的变量可以把它叫做inputRec或者employeeDate,你觉得那一个命名会比较好一点了?当然是后者,inputRec并没有从问题的角度去思考,它表达的计算机的思维。看程序的人是从问题的角度去看的,所以后者的命名比较好。
2. 变量名称的长度
变量名称要能准确表达其含义,所用的单词不可避免的要长些。但是如果变量名称太长的话同样可读性不高,这充分说明了凡事都不能邹极端。还有如果名称太长调试程序也不方便,多长或者多短可以适合一个变量名称了?用人说是平均10到16,或者8到20.这个应该没有定论,只要记住名称要清楚表达变量含义,长度不会看起来太长或太短就可以。举几个例子:
太长: numberOfPeopleOnTheUsOlympicTeam
numberOfSeatsInTheStadium
maximumNumberOfPointsInModernOlympics
太短: n, np, ntm
n, ns, nsisd
m, mp, max, points
适中: numTeamMembers, teamMemberCount
numSeatsInStadium, seatCount
teamPointsMax, pointsRecord
3. 变量名称表达变量的属性
相信大多数情况下for循环的次数都是用变量i来控制,而且是在没必要为它冥思苦想取个好听的名词如count或者index,因为i的生存时间就仅仅在一个for循环里。这里长短的限制就没有了,毕竟要因地制宜。《Code complete》里说较长的变量名适合于较少使用的全局变量,较短的变量名适合局部变量或者循环变量。
在c++或者c#中可以使用全局命名空间,防止命名冲突,Java中有包,但是在c或者ABAP中只有加上限定前缀了。如在一个数据库中雇员类可以命名为dbEmployee,接口中的雇员类可以命名为uiEmployee。
4. 计算结果限定词
许多程序都有运算结果的限定词如:Total,Sum,Average,Max,Min,Record,String,Pointer,code complete建议把这些限定词放在命名的末尾。在我看来这还是体现了一致性consistency,这是我在人月神话中获得最大的感受。
唯一的例外是num这个单词,注意numSales和SalesNum表达的是完全不同的意思,前者代表销售总额,后者num的含义相当于index。所以最好用Total或者index代替num来命名,以取消歧义。