1、Packing information into names. ---- 把信息包含在命名中。
选择非常特殊的词,避免选择词义空洞的词。例如,在GetPage()中的Get并不能充分表达page是从本地缓存、数据库还是互联网上得到,利用比较特殊的词会避免这样的情况,如FetchPage()、DownloadPage()。
再如:
class BinaryTree
{
int Size();
...
};
Size()包含的信息并不明确,可以用比较特殊的词来代替,如Height(),NumNodes(),或者MemoryBytes()。
尝试用色彩丰富的词。例如在PHP中的函数explode()是一个色彩丰富的词。
2、It's better to be clear and precise than to be cute. ---- 使命名表达的意思清晰准确要比矫揉造作的词好。
拒绝使用像like、tmp和retval的通用名字。
选取一个能描述实体值和目的的名字。通常我们用retval代表return value,但是这个词并不包含很多信息,例如:
retval += v[i];
和
sum_squares += v[i];
比较,第二个表达式变量的命名更能包含明确地信息,这有助于我们在查bug时,快速定位。
建议:retval包含的信息不多,需要用能描述变量值得名字替代。
现在看下tmp的用法:
在下面的例子中:
if (right < left)
{
tmp = right;
right = left;
left = tmp;
}
在这种情况下,tmp的使用是非常合适的,这个变量的唯一作用是临时存储,而且生命周期只有几行,tmp传递了一个特殊的含义----这个变量再也没有其他的义务了,所以这个变量也不会传递给其他函数,用作其他用途。
建议:tmp只能用在生命周期很短而且临时性是这个变量最重要的要素时的情形。
loop Iterators
i, j, iter名字通常用在指数参数和循环迭代因子上,如果将这几个变量名字用在其他用途上,会使人感到困惑。当然在循环迭代因子的命名上会有比i, j, iter更好的名字,例如:
if (club[i].member[j] == user[k])用如下方式替换更好:
if (club[ci].member[mi] == user[ui])
建议:如果你打算用retval, tmp, i这样的通用名字,给一个合理的理由吧。人们过度使用通用名字,都是出于懒惰。这很容易理解,当人们没有想到好的名字时,使用没有意义的名字很容易。但是如果你养成一个花额外的少量时间去想一个好名字,那么你将会发现你会越来越快地起名字。