提防使用外形相似度较高的名称 。例如,想区分模块中某处的XYZControllerFor-EfficientHandlingOfStrings和另一处的XYZControllerForEfficientStorage-OfStrings,会花多长时间呢?这两个词的外形实在太相似了 。
以同样的方式拼写出同样的概念才是信息 。拼写前后不一致就是误导 。我们很享受现代Java编程环境的自动代码完成特性 。键入某个名称的前几个字母,按一下某个热键组合(如果有的话),就能得到一列该名称的可能形式 。
假如相似的名称依字母顺序放在一起,且差异很明显,那就会相当有助益,因为程序员多半会压根不看你的详细注释,甚至不看该类的 *** 列表就直接看名字挑一个对象 。
误导性名称真正可怕的例子,是用小写字母l和大写字母O作为变量名,尤其是在组合使用的时候 。当然,问题在于它们看起来完全像是常量“壹”和“零” 。
int a = l;if (O == l)a = O1;elsel = 01;
读者可能会认为这纯属虚构,但我们确曾见过充斥这类名称的代码 。有一次,代码作者建议用不同字体写变量名,好显得更清楚些,但前提是这种方案得要通过口头和书面传递给未来所有的开发者才行 。后来,只是做了简单的重命名操作,就解决了问题,而且也没引起别的问题 。
— 03 —
做有意义的区分
如果程序员只是为满足编译器或解释器的需要而写代码,就会制造麻烦 。例如,因为同一作用范围内两样不同的东西不能重名,你可能会随手改掉其中一个的名称,有时干脆以错误的拼写充数,结果就会出现在更正拼写错误后导致编译器出错的情况 。
文章插图
光是添加数字系列或是废话远远不够,即便这足以让编译器满意 。如果名称必须相异,那么其意思也应该不同才对 。
【造梦西游3代码怎么用代码怎么用】以数字系列命名(a1、a2…aN)是依义命名的对立面 。这样的名称纯属误导——完全没有提供正确信息,没有提供导向作者意图的线索 。试看:
public static void copyChars(char a1[], char a2[]) {for (int i = 0; i < a1.length; i++) {a2[i] = a1[i];}}
如果参数名改为source和destination,这个函数就会像样许多 。
废话是另一种没意义的区分 。假设你有一个Product类,如果还有一个名为ProductInfo或ProductData的类,那它们的名称虽然不同,意思却无区别 。Info和Data就像a、an和the一样,是意义含混的废话 。
注意,只要体现出有意义的区分,使用a和the这样的前缀就没错 。例如,你可能把a用在域内变量,而把the用于函数参数[5] 。但如果你已经有一个名为zork的变量,又想调用一个名为theZork的变量,麻烦就来了 。
废话都是冗余 。variable一词永远不应当出现在变量名中 。table一词永远不应当出现在表名中 。NameString会比Name好吗?难道Name会是一个浮点数?如果是这样,就违反了关于误导的规则 。
设想有一个名为Customer的类,还有一个名为CustomerObject的类,它们的区别何在呢?哪一个是表示客户历史支付情况的更佳方式?
有一个应用反映了这种状况 。为当事者讳,我们改了一下,不过犯错的代码的确就是这个样子:
getActiveAccount(); getActiveAccounts(); getActiveAccountInfo();程序员怎么知道该调用哪个函数呢?
如果缺少明确约定,那么变量moneyAmount与money就没区别,customerInfo与customer没区别,accountData与account没区别,theMessage也与message没区别 。要区分名称,就要以读者能鉴别不同之处的方式来区分 。
— 04 —
使用读得出来的名称
人类长于记忆和使用单词 。大脑的相当一部分就是用来容纳和处理单词的 。单词能读得出来 。人类的大脑中有那么大的一块地方用来处理言语,若不善加利用,实在是种耻辱 。
如果名称读不出来,讨论的时候就会像个傻鸟 。“哎,这儿,鼻涕阿三喜摁踢(bee cee arr three cee enn tee)[6]上头,有个皮挨死极翘(pee ess zee kyew)[7]整数,看见没?”这不是小事,因为编程本就是一种社会活动 。
有一家公司,程序里面写了一个genymdhms(生成日期,年、月、日、时、分、秒),他们一般读作“gen why emm dee aich emm ess”[8] 。我有见字照拼读的恶习,于是开口就念“gen-yah-mudda-hims” 。
后来好些设计师和分析师都有样学样,听起来傻乎乎的 。我们知道典故,所以会觉得很搞笑 。搞笑归搞笑,实际是在强忍糟糕的命名 。在给新开发者解释变量名的意义时,他们总是读出傻乎乎的自造词,而非恰当的英语词 。比较
推荐阅读
- 重复名空白代码,重复名字查询
- ie浏览器c0000005异常代码,c0000005异常代码蓝屏
- 苹果手机虚电量校正代码,苹果手机虚电量校正有什么用
- 企业代码怎么查询,企业代码查询系统官网
- 江西建设职业技术学院排名 江西建设职业技术学院
- 古井贡酒股票分析报告,古井贡酒股票代码是多少
- 梦幻西游手游变异泡泡技能怎样弄 梦幻西游变异泡泡技能是什么
- 梦幻西游手游技能认证是什么意思 梦幻西游手游唐僧技能是什么
- 梦幻西游手游普陀怎么加点 梦幻西游手游普陀怎么买武器
- 梦幻西游手游6技能鲛将军 梦幻西游鲛将军技能是什么