代码大全读后感之二
为变量命名时最重要的考虑事项是,该名字要完全、准确地描述出该变量所代表的事物。
currentDate和todaysDate都是很好的名字,因为它们都完全而且准确地描述出了“当前日期”
这一概念。事实上,这两个名字都用了非常直白的词。程序员们有时候会忽视这些普
通词语,而它们往往却是最明确的。cd和c是很糟的命名,因为它们太短,同时又不具有
描述性。current也很糟,因为它并没有告诉你是当前的什么。date看上去不错,但经过最
后推敲它也只是个坏名字,因为这里所说的日期并不是所有的日期均可,而只是特指当前日
期;而date本身并未表达出这层含义。x、x1和x2永远是坏名字——传统上用x代表一个
未知量;如果你不希望你的变量所代表的是一个未知量,那么请考虑取一个更好的名字吧。
名字应该尽可能地明确。像x、、i这些名字都泛泛得可以用于多种目的,它们并
没有像应该的那样提供足够信息,因此通常都是命名上的败笔。有人也许会反驳说,把
i用作循环下标是最正常不过的了,难道非得写成indexOfTheLoop这种又臭又长的名字才算
好吗?Steve McConnell认为,如果循环只有寥寥数行,而且只是单层循环,那么用
i是也是可行的。不过试想一下,如果你一直习惯用i作循环下标,
而你将来可能需要把这个循环放到另一个循环中去执行,即循环嵌套,
那么内外层循环都用i作下标肯定是不行的。如果编译器提醒你说变量
i重复定义,那还算走运;如果编译器默不作声,而你自己又忘了修改,
呃,你听见虫子飞舞的声音了吗?由于代码会经常修改、扩充,或者复制到其他程序中去,
因此很多有经验的程序员索性不使用类似于i这样的名字。如果循环不是只有几行,
那么代码阅读者会很容易忘记i本来具有的含义,因此最好给循环下标换一个更有意义的名字。
导致循环变长的常见原因之一是出现循环的嵌套使用。如果你使用了多个嵌套的循环,那么就应该给循环变量赋予更长的名字以提高可读性:
for (int teamIndex = 0; teamIndex < teamCount; teamIndex++)
{
for
(int eventIndex = 0; eventIndex < eventCount[teamIndex]; eventIndex++)
{
score[teamIndex][eventIndex] = 0;
}
}
谨慎地为循环下标变量命名可以避免产生常见的下标串话(index cross-talk)问题:
想用j的时候写了i,想用i的时候却写了j。同时这也使得数据访问变得更加清晰:
score[teamIndex][eventIndex]要比score[i][j]给出的信息更多。
如果你一定要用i、j、k,那么不要把它们用于简单循环的循环下标之外的任何场合—
—这种传统已经太深入人心了,一旦违背该原则,将这些变量用于其他用途就可能造成误解。
要想避免出现这样的问题,最简单的方法就是想出一个比i、j、k、更具描述性的名字来。
变量名的最佳长度似乎应该介于x和maximumNumberOfPointsInModernOlympics
之间。太短的名字无法传达足够的信息。诸如x1和x2这样的名字所存在的问题是,
即使你知道了x代表什么,也无法获知x1和x2之间的关系。太长的名字很难写,同时也会使得程序的视
觉结构变得模糊不清。当研究发现,当变量名的平均长度在10到16个字符的时候,
调试程序所需花费的气力是最小的。平均名字长度在8到20个字符的程序也几乎同样容易调试。这项原则并不意味着
你应该尽量把变量名的长度控制在9到15或者10到16个字符。它强调的是,如果你查看
自己写的代码时发现了很多更短的名字,那么需要认真检查,确保这些名字含义足够清晰。