十个最好的编程变量、方法、类和包的名字(翻译)

原文地址:http://javarevisited.blogspot.jp/2014/10/10-java-best-practices-to-name-variables-methods-classes-packages.html(需要翻墙)

==================================================分割线====================================

  十个最好的编程变量、方法、类和包的名字

名字里面有什么? “如果玫瑰被赋予其他的名字,它还是依然芳香”,这是一句在莎士比亚的《罗密欧与朱丽叶中》非常著名的话语。但很遗憾地说,在编程设计和代码中,名字是非常重要的。据说,代码是所有软件的最好的文档。因为你的其他任何的文档和说明,都是可能很快就过时了,但代码永远都会告诉你真相;如果代码是最好的文档,那么名字就是里面最具用决定性的元素了。当给变量或者方法赋名时,每一份或大或小的努力,都会附在或长或短的时间内。实际上,如果你问我一个可以学习的技巧,我一定会推荐说是:赋予你的变量或者方法的时候准确的名字。我推荐这个的编码技巧的一个原因是它可以大大地增强任何程序或者算法或者程序的可读性。因为每个程序员话费在阅读代码的时间更大于写代码的时间,所以你给你程序里面的元素起一个有意义的名字是极其重要的。可读性也是一个纯净的代码的最重要的一个因素。如果你阅读过Bob大叔的《Clean Code》(中文翻译为《代码整洁之道》),你就已经看过了这篇关于有意义的起名的文章。这只是呈现出对于变量、方法、类名、报名的命名具有多么重要意义。虽然这些编码技巧是从Java程序员中提炼出来的,但是它们也可以用在其他的编程语言。实际上,技巧的大部分是不依赖任何语言的,可以写bash脚本,sql语句,C++ 代码或者其他任何的计算机语言。实际上,你将会重视在shell脚本或者数据库存储程序中更加重视这些技巧,因为它们没有像Java IDE这么智能的工具。

 

Java中最好的合适的命名约定

这有一些很好的当Java开发者编码和程序设计时应该来学习的技巧。大部分的这些技巧都是从年的阅读和编写代码的经验总结出来的。这些经验不仅包括了最好的操作还包括来了那些要避免的操作的技巧,因为在实操中,哪些不要做和哪些要去做是一样重要的。同时,这个列表意味着已经是完全的了。如果你有其他好的命名技巧,请来分享。完美是长久的过程,每一天我们都应该去学一些重要的东西。好了,让我们去看下在程序中给变量、方法、类、包命名的更好的方式

 

1.        避免没有意义的名字

比如像 abc ,temp , date 等,这种起名不存在如何含义。它们会减低代码可阅读性。它们最好只是使用在写些简单的测试程序,简短的demo和不会超过50行的代码中。你应该永远都不要写这些没有含义的变量的代码在你的常规工作代码中。为什么?因为测试代码不用来维护而一个真实的项目是需要维护多年的,而测试代码只是要你一个人在写而已,但专业的项目是需要多人来编写的。

 

 

2.        给它们有含义的命名

这是第一条最好的编码技巧了。用有含义的命名来代替没有意义的命名,可以解释这段程序的意思。比如说,方法名为getPayDate()是比gpd()或者是getPD()好很多,因为如果我看到别人在我的代码里面写入了getPayDate() ,我就会知道这个方法是可以返回付款日期给我的。甚至是几年后当我看到时还是可以知道,而gpd()和getPD()就不会让我想起来了。一个程序员和我争论说他不会在私有方法里面遵循这些规则,因为私人方法只有自己有权限访问,其他人则可以看到他的注释。从某个角度上来说他是对的,但是这对他没有任何帮助,因为这些技巧是一种习惯,而习惯是需要很长的时间来形成的。如果你经常不去遵循它的话,你就很有可能在需要用到它的时候却没有用到。另外,如果你的类超过400行代码的时候再回去看的时候,看到这些注释会刺激你去重看这些方法。

 

 

3.        如果能表达出含义,尽量用短的命名而不用长的

我喜欢使用短的名字来命名我的方法,但是前提是它已经足够清楚地描述了程序含义了。比如说,getPayDate()和retreivePaymentDate(),前者明显比后者好。因为两者都能展现出目的,更短的一个可以更好的阅读和编写,但是不要忘记去遵循像Java bean(变量是payDate的话,getter方法就应该是getPayDate)之类的命名规则。顺便说下,我更倾向JQuery中的方法而不是像Java bean的方法规则。我很喜欢使用像text()这样不用参数就可以返回文本的方法。

 

4.        避免相似的命名

最糟的就是多个相似的名字了,比如说,有两个变量分别为employee和employees,两者字符差不多,就只差以后一个字符了。这种的区别是很难去区分的,还有很容易就导致微妙的Bug,这种Bug甚至在Code Review的时候都检查不出来。如果你真的要代表一个collection或者plural,那么优先使用像listOfEmployees,bunchOfEmployees这种。顺便说下,请小心的使用代表编程的概念命名,比如List,在Java里面这是一个有序的collection,所以一些Java 编程人员就会认为listOfEmployee就是一个有序的Employee的collection。但如果不是的话,就会产生误会了。

 

5.        倾向于描述性的命名,而不是简易格式

这和我已经提过的短的命名相配合。先声明的是,更短的命名必须揭示了变量或方法的目的。比如说,getPayDate是比较好的,但是getLInd()是不如getLiquidityIndicator()。所以选择简短命名时必须要它已经足够清楚地表达了它的含义。

 

6.        遵循Java编码规范

如果你是写Java的,那你就必须遵循Java编程规范,如果你写的是开源程序,这甚至是最重要的。因为Java编程规范是在Java开发者中常见,所以这可以让其他开发者可以轻松地阅读你的代码。一些最普遍的Java编程规范如下:

——类名首字母大写,比如:Employee,Student,Thread。

——方法首字母大写和遵循驼峰命名法,比如:getEmployee(),getPayDate()等

——变量命名的时候也遵循驼峰命名法,比如:price,quantity , totalAmount 等。

——常量的话全部大写,比如:MAX_QUANTITY,MAX_PRICE等

——遵循bean的命名规范,因为很多开源框架要使用到反射,反射就是建立在bean的命名规范上的。举个例子,显示标签使用到反射和bean的命名规范来显示在table的数据。如果你起了指定命名,显示标签就要在table数据类里面调用getName()方法了。

 

 

7.        使用一致的命名,避免同义词

这是另一个极好的被人争论命名的技巧,但做到一致性的话可以尽可能地否决存在潜在的争论。拥有同义词的相似的方法名不会有太多的危害性,但是更好的做法是坚持而不是用三个不同的方法名,比如说destory() , kill() , 或者 finish()三个一起用,不如直接使用它们其中的一个比如destory()。这样子会让你的api更加好用,因为其他程序员可以更容易地预测和搜索。这样子也可以让你保持一个功能一个地方,而避免了偶然复制了代码,请记住自己不要重复。

 

 

8.        遵循几点的编程规范

一开始我就说了要避免使用没有意义的命名,但是这里有一些例外,比如I , j ,它们是作为循环的指针来的。如下的代码展示:

 
for(int i=0; i<10; i++){
  //your code
}
 


程序员应该对这个很熟悉,他们会对看到其他变量的指针表示很惊讶的。类似的,gettter和setter方法也是这样子。

 

9.        在Java里面,类名应该是名词

你的类名应该是名字和应该表达出这个类所表达的意思,比如说Employee,Thread,String等等。相似的方法名比如说get、set、do、invoke等等。接口的名字应该描述它的能力或者是可以做什么部分。Runable 可以 run ,Callable可以call 。包名应该遵循公司的标准架构,比如说com.company.project.module。你可以在开源项目中找到Java包起名的规范的案例,比如说ApacheCommonsBeanUtils 使用的是org.apche.comons.beanutils.BasicDynaBean。

 

 

10.     避免像_,m_,o_这种混乱的命名

一些程序员倾向于指定像m_来表示成员表量,或者是simply_来区分成员变量和局部变量。尽量不要这样做,因为这样看起来会很混乱。最好你用有含义且唯一的命名。顺便说下,如果你的项目已经使用了m_ 的命名方式,那么最好是继续用它,因为它不可能会重写或者修正整个项目。更糟的是在一个项目里面不同的地方使用不同的命名规范。类似地,很多程序员使用了想压力命名法,比如说一个boolean型变量bExite,一个Interger型的变量iMax。如果你在遗留项目里面工作的话,这还不算太坏,但是如果你是瞎写的就不要乱用它。

 

11.     避免使用非ASII码字符和当地的文字

使用其他字符而不是ASII码字符,特别是非英语的是最烂的操作了。永远不使用其他的语言的字符,这可能不会被所有的平台、IDE或者不同的机器之间所支持。类似的,不用使用当地的语言,比如北印度语,法语或者德语。当地的语言不会保证下一个维护你代码的程序员所认识,所以最好还是避免做这种操作。

 

12.     善于利用平常的词语比如is、has、can、do之类的

我发现带有is、has、can的boolean的变量和方法的命名可以促进代码的可阅读性。像isAlive(),hasNext()、canExecute() 增强了很多可阅读性。当你使用时条件语句是,你可以使用同样的规则来命名boolean型变量,比如:

 

if(isRaining){
  bringUmbrella();
}

 

 

这就是全部最佳的Java 给变量、方法、类和包的命名技巧。大部分的这些建议是并不依赖编程的架构的,在写bash脚本、常规编码、Sql存储语句时也可以用到。虽然命名规范是基本编码的一方面,但是这会经常被忽略。不要仅满足于第一次去尝试,要经藏演示区阅读你的代码和努力为赋予给多有意义的能清楚表达含义的变量名。不要弄混好和坏的案例,匈牙利规范和Java规范等等。在Java里面命名方法和变量时,最好的技巧是大家都可以去遵循的。

 

 

 

 

 

 

 

 

 

 

 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值