分享
 
 
 

关于命名规范的一些建议

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

类命名

Kent Beck 提出其中大多数的规则。Kent Beck 的《Smalltalk Best Practice Pattern》是我

至今为止读过的所有书里面最符合我审美观点的书籍—渊博的知识和春秋的笔法。

简单超类名—传达设计目的

命名总要受各种因素的影响。你想把名字取得尽量短,易于输入、格式化、容易说出口。

同时,你也想让名字尽可能包含更多的信息,这样读者就能够更快地理解名字所包含的实际

内容。你可能取一些尽量为人所熟悉的名字,这样在名字中就可以传递更多的共同经验。同

时,你也想让名字尽量唯一,别人的代码命名就不会和你重复。

Kent Beck 给出的第一个规则就是不要缩写。缩写对输入(20 年内10-100 次)的考虑

多余对理解(20 年内1000-10000 次)的考虑。理解缩写词需要两步,第一步理解这些缩写

代表的词语,第二步采取理解这些词语所代表的意义。

对一个大层次的根类命名是一个重大的决策。在未来的20 年中,人们可能不断地使用

你所给出的名字。你必须不犯错误。

人们通常在命名超类时加上各种各样的修饰,富有计算机科学意义、给人深刻印象但最

终却没有意义的单词,如Object,Thing,Component,Part,Manager,Entity 或Item。

你在创建一个词汇表,而不是写一个程序。暂时做一回诗人。简单、生气勃勃、容易记

忆远远比说出全部内容更有效。规则:

Name a superclass with a single word that conveys its purpose in the design。

(用一个单词命名超类,传达它的设计目的),好的例子包括:

Number 、Collection、Magnitude、Model

全称子类名—区分异同

命名类的一种方法是给一个唯一的名字。唯一的名字可以让你用用最短的信息表达最多

的信息。

这对于通用术语来说是对的。Array 是Collection 的一个子类,因为绝大多数人都知道

“Array“意味着什么。

但在绝大多数情况下,类继承的层次结构对于理解你的代码十分重要,特别是一个子类

概念上是超类的变种同时又和超类共享实现的情况。你需要传递两部分信息:

1.新类如何相同,以及

2.新类如何不同

要表达相同,你可以借用超类的名字。这不一定是一个直接的子类和父类关系,层次上

有一定距离也无妨。要表达不同,你需要一个单词确切地强调新类为什么不是超类的理由。

所以,有规则:

Name subclasses in your hierarchies by prepending on an adjective to the superclass

name。

(在超类名字前加上内容命名你层次中的子类。)

例子:

BigInteger 是一个可以表达很大很大数字的整数。

方法命名—揭示意图

为什么好的代码总有很多简单的方法,代码可能只有一行,譬如:

class ParagraphEditor。。。。

public void highlight(aRectangle:Rectangle){

reverse(aRectangle);

}

这个highlight 只是分派到reverse,为什么还需要?

关键在于Communication。因为有了这个方法,以后的代码就可以用highlight 来说话。

我要加亮一个区域,我就highlight 它。

你当然可以直接使用reverse,结果是一样的。但所有调用代码都揭示了实现—“我通

过反转一个矩形来加亮它“。

代码应当揭示意图,它另外的好处是可以更方便通过继承修整。如果你想要一个

ParagraphEditor 用颜色加亮,那么只需继承ParagraphEditor 并覆盖highlight 即可。所以:

communicate what is to be done rather than how it is to be done。

传达你要做什么(接口)而不是你如何做(实现)。

实例(临时)变量命名—暗示角色

任何实例变量传达的信息包括两部分:

1.什么是它的目的?

2.它如何被使用?

一个变量的目的或者说它担当的角色对读者非常重要,因为它能够正确地引导读者的注

意力。一般,你在阅读代码时脑袋里总有一个目的。如果你理解变量的角色,而这个角色和

你的目的无关,那么你可以直接跳过使用该变量的无关代码。如果发现该变量的角色和你的

目的有关,那么你就能马上缩小你的阅读范围—那些引用此变量的相关代码。

一个变量如何被使用和发送给它什么消息通常是它的“类型“。理解类型并非不重要。

但是,对于实例变量来说,你能够了解这个变量所担当角色的唯一地方就是它的名字。如果

一个Point 中有两个实例变量叫做int1、int2 而并非x、y,那么在你理解哪一个是横向坐标,

哪一个是纵向坐标前,你可能要都上一堆代码。更何况你还要阅读与之相关的很多代码。而

变量的类型很容易从它声明、传递给它的消息看出来。所以:

Name instance variable for the role they play in the computation。Make the name plural

if the variable will hold a Collection。

(用计算中实例变量所承担的角色对它命名。如果变量持有一个集合,使用复数。)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有