一. 名副其实
好的变量、函数(方法)、类的名称能见名知意,它会告诉你,它为什么存在,它做什么事。如果需要注释来补充说明,那就不算名副其实。
但是很多人还没达到这种级别(包括我)。从自身来说,写代码的时候命名问题是个比较头痛的问题,如果仅仅有少量变量或者函数(方法)那还可以命名的比较不错,但是在项目开发中显然不会仅仅命名几个变量或者函数就能结束,而且还会遇到多个函数里寓意相同的变量,导致代码量多的时候,搜索也不是很好,不能一步到位,而且还有其他的一些命名问题,我想都深有体会,所以我想说的是,还是应该多练习。
二. 避免误导
1. 避免代码命名掩藏代码本意的变量名。
2. 避免使用不同之处较小的变量名。
3. 避免使用小写字母l和大写字母O作为变量名。
4. 避免使用缩写单词作为变量名
5. 避免使用中文拼音作为变量名
6. 避免思维映射,使用脑筋急转弯式的变量名
7. 避免使用搞笑的,恶意的等情绪化的词语作为变量名
8. 避免使用双关语作为变量名,应该保证一词一意
三. 做有意义的区分
1. 因为同一作用域内不能有两个重名的变量名,否则会被覆盖(强类型语言中会报错),你有可能随手改掉其中一个的名称,这时候你的命名方式可能就比较随意。可能添加数字系列,可能添加不必要的废话,可能添加错误的拼写去区分两个相似度过高的变量名称。这种变量名就属于误导----因为完全没有提供正确的信息。
1)数字系列例如:
public function copyChars($a1,$a2)
{
$length = count($a1);
for ($i = 0; $i < $length; $i++) {
$a2[$i] = $a1[$i];
}
}
function copyChars($a1,$a2)
{
$length = count($a1);
for ($i = 0; $i < $length; $i++) {
$a2[$i] = $a1[$i];
}
}
2)废话系列
假设你有一个Product类,如果还有一个ProductInfo 或者 ProductData类,他们的命名虽然不一样,但是意思却并没有什么太大的差别。Info和Data就像 a、an、the一样,属于废话。
还应该谨记,variable永远不要出现在变量名中,Table永远不应该出现在表名中。nameString会比name命名的好吗,难道name会是整形或者浮点数吗?显然不会,所以如果是这样,就触犯了关于误导的规则。
四、使用读得出来的名称
如果读不出来,讨论的时候就会像个傻子。
“哎,这儿,鼻涕阿三喜恩替(bee tee ar three cee enn tee)上面,有个皮爱死技巧整数,看见没?”,遇到这种场景的时候怕是搞笑死了。而且因为不能完整的读出来,每个人读的时候就会以自己理解的方式给读出来。
然后讨论的时候就更搞笑了:
甲:某方法已经实现什么功能,你到时候调用就行。
乙: 你说的方法在哪呢?我怎么没找到。
甲:就是什么什么方法,在第几行到第几行。
乙:一脸懵逼,突然恍然大悟,哎呀,我去,这不是那什么什么方法嘛。
甲乙:两人一对视,哈哈哈....
五、使用可搜索的名称
单字母名称和较短的字母组合有个问题,就是很难在一大篇文字中找出来。
找到MAX_CLASS_STUDENT_ID很容易,但是找到字母e,就很麻烦。因为它可能是其它变量名或者方法的一部分,又或者出现在各种表达式中,这样的结果就是如果你想要修改这个变量名,但是一搜索整个源文件或者整个项目都布满了这个字母组合,就会很头大,有可能会出现漏改的情况。
若变量或者常量可能在代码中多处使用,则应赋给其以便于搜索的名称。
六、 成员前缀
大多数的前缀都是没有意义的,读的时候都被我们直接忽略了。但是有时候我们还得用前缀来区分所属关系。
七、类名、方法名命名规则
类名和对象名应该是名词或名词短语,如Customer,Account等这样的动词,而不应该是动词。
方法名应该是动词或者动词短语,如:deletePage,saveStudent等,并且适当加上get、set、is等前缀。
八、命名的解决办法
1. 使用解决方案领域的名称
2. 使用源自所涉及问题领域的名称
3. 添加有意义的语境
好变量名对自己,对团队都重要。你经手的程序中满满都是命名良好的变量,那么其他人读着的时候也会很舒服,而不会抱怨说这写的什么东西。所以,变量名命名真的很重要。