我们做大量的命名,给变量、函数、参数类和封包命名,给目录命名,如何做好命名,应该遵循以下几条规则
(1)名副其实,通过名字就可以知道它为什么会存在,它做什么事,该怎么用
下面为参数命名示例,下面的命名要比上面更名副其实
int d; //消逝的时间,以日计
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
(2)避免误导
如accountList指定一组账户,除非它真的是List类型,List对程序员有特殊意义,如果不是List,就会引起错误的判断
(3)做有意义的区分
比如,你有一个Product类,如果还有ProductInfo,ProductData类,虽然他们名称不同,意思却无区别
(4)使用能读出来的名称
比如,定义一个生成时间戳的函数名为genymdhms(生成年月日时分秒),可读性太差,且不易理解,改为gennerationTimeStamp
(5)使用可搜索的名称
长名称胜于短名称,搜得到的名称胜于自造编码代写就的名称。单字母的名称仅用于短方法中的本地变量。名称长短应与其作用域大小相对应。若变量或常量可能在代码中多处使用,则应赋其以便于搜索的名称。
(6)类名,类名和对象名应该是名词或名词短语,如Customer、WikiPage、Account和AddressParser,避免使用Manager、Processor、Data或Info这样的命名。类名不应是动词
(7)方法名,应该是动词或动词短语,如postPayment、deletePage或save
(8)每个概念应该对应一个词
给没给抽象概念选一个词,并且一词以贯之,例如fetch、retrieve和get来给多个类中同样方法命名,怎么记得住哪个类中是哪个方法呢,同样,在一堆代码中有controller,又有manager,还有driver就会令人困惑
(9)使用解决方案领域名称
只有程序员才会读你的代码,所以,尽管使用计算机科学术语、算法名、模式名、数学术语吧。
(10)使用源自所涉问题领域的名称
如果不能用程序员熟悉的术语命名,则采用所涉问题领域而来的名称吧,至少,负责维护代码的程序员就能去请教领域专家了。
优秀的程序员与设计师,其工作之一就剩分离解决方案领域和问题领域的概念。与所涉问题领域更为贴近的代码,应当采用源自问题领域的名称。
(11)添加有意义的语境
很少有名称是能自我说明的——多数都不能,反之,你需要用有良好命名的类、函数或名称空间来放置名称,给读者提供语境。如果没有这么做,给名称添加前缀就剩最后一招了。
设想你有名为firstName、lastName、street、houseNumber、city、state变量,它们在一起的时候,很明确构成一个地址,不过只是在某个地方看到state变量,还会认为是一个地址的一部分吗
(12)不要添加没用的语境
假设你有一个名为“加油站豪华版”(Gas Station Deluxe)的应用,给其中每个类中添加GSD前缀就没什么用。只要短名称够清楚,就比长名称好。
对于Address类的实例来说,accountAddress和customerAddress都说不错的名称,不过用在类名上就不太好,Address是个好类名。如果需要与MAC地址、端口地址和Web地址区别,我会考虑使用PostalAddress、MAC、URI。这样命名更精确,而精确是命名的要点。