关于命名规范的一些建议

原创 2001年10月25日 16:28:00


类命名
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。
(用计算中实例变量所承担的角色对它命名。如果变量持有一个集合,使用复数。)

关于公司的一些奖惩制度的建议

1)“上班时间不许睡觉、吃零食、喧哗、看报纸等”:我想管理IT企业的员工与管理生产线上的工人要采用不同的方式。一直坐在电脑前不一定就会有最大的效率。我认为制定奖惩措施的目的:让每位员工发挥最大效能。如...
  • capers
  • capers
  • 2004年12月13日 09:15
  • 2677

thinkphp命名规则

类文件都是以.class.php为后缀(这里是指的ThinkPHP内部使用的类库文件,不代表外部加载的类库文件),使用驼峰法命名,并且首字母大写,例如DbMysql.class.php;确保文件的命名...
  • zouhao619
  • zouhao619
  • 2013年12月31日 15:39
  • 901

] FPGA设计需注意的方方面面

不管你是一名逻辑设计师、硬件工程师或系统工程师,甚或拥有所有这些头衔,只要你在任何一种高速和多协议的复杂系统中使用了FPGA,你就很可能需要努力解决好器件配置、电源管理、IP集成、信号完整性和其他的一...
  • zhongrg
  • zhongrg
  • 2008年03月17日 20:16
  • 1175

一些关于如何写更好的代码的建议

注:本文内容主要是博主在网上、书上以及自己在写代码过程中的感悟 1、过早的优化是万恶之源 2、如果程序需要管理员权限, 那么最好是修改程序而不是赋予管理员权限 3、...
  • Sbtgmz
  • Sbtgmz
  • 2016年05月05日 13:38
  • 224

给正在面试的同学一些建议

给正在面试的同学一些建议前言做Android开发已经有三年时间了,由于忙于工作的原因(如果你知道996,相信你会理解,如果不了解,请自行百度…),所以一直没有时间来分享开发中遇到的问题,我希望在这里能...
  • Hugh_hly
  • Hugh_hly
  • 2016年03月10日 17:32
  • 274

cadence 心得

1 orcad转换为cadence的时候电源网络或者其它NET不显示,仅仅高亮在ORCAD 或者cadence PCB环境中取消no_rat属性即可2 orcad做的元件封装,一定不要重名,特别是GN...
  • Baiduluckyboy
  • Baiduluckyboy
  • 2010年12月03日 11:55
  • 1295

如何提高学习的效率,二十四条好的建议

1、选一门自己有兴趣而且教师讲得好的课程。  2、如果在线课程不是固定时间可以选择时间的话,把时间安排在你注意力和精力最集中的时间段里,而不是相反。经过一个充足的睡眠之后,早上起床时看视频效果会非常...
  • wed110
  • wed110
  • 2014年08月15日 15:22
  • 556

个人的web开发心得(四)----------非常适合入门新手,都是常识

31.SQL关于日期的操作.Dateadd(wk,datediff(wk,0,getdate()),-1)                              Dateadd(wk,datedi...
  • JOHNCOOLS
  • JOHNCOOLS
  • 2006年10月12日 00:54
  • 1285

谈谈关于网瘾的看法和建议

这些方法还是这些方法吗?不,是那些方法。
  • u011570492
  • u011570492
  • 2016年11月21日 19:31
  • 1518

关于股权激励方案建议参考

1、目的    为了进一步培育人才,确保公司持续稳步发展,让优秀员工分享公司的成功,并与公司共担风险的能力,奖励为公司做出持续性贡献的员工,激励员工不断地创新热情,不断地吸纳人才、留住人才,合理地使...
  • k8080880
  • k8080880
  • 2017年05月09日 08:42
  • 265
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于命名规范的一些建议
举报原因:
原因补充:

(最多只允许输入30个字)