改变编码坏习惯

转载 2011年01月10日 19:40:00

 

1.对局部变量(local variables),字段(fields),参数(method arguments)这三种变量的命名没有区分,造成了代码的阅读困难,增加了代码的维护成本。

 

作者举了个例子:

Java代码 
  1. public boolean equals (Object arg) {  
  2.   if (! (arg instanceof Range)) return false;  
  3.   Range other = (Range) arg;  
  4.   return start.equals(other.start) && end.equals(other.end);  
  5. }  

 

在这个方法中,arg直接用argument的缩写,虽然大家一看就知道这是参数了,但这种命名方式却丢失了参数代表的对象本身的含义。大家知道这是参数,却不知道这是什么参数。如果方法的参数多一点,都按照arg1,arg2这样的方式命名,阅读代码的时候很头疼。另外两个字段变量,start和end,突然凭空而出,想一下才知道这应该是字段。当然,这个方法很短,造成的困难还不大,如果这个方法比较长的话,突然看到start和end两个变量,一般会先在前面找一下是不是局部变量,然后才能确定是类的字段变量。

 

这个问题貌似微不足道,但为什么要让代码阅读者花费额外时间在这些琐碎的问题上呢?如果有个方案能让代码阅读者一目了然的明白变量是那种变量,为什么不采用呢?就如同Steve McConnell在 《代码大全》中说的:"让人费神去琢磨神秘杀人凶手这没有问题,但你不需要琢磨程序代码,代码是用来阅读的。"


作者提出了解决方案:

  • 方法参数用前缀a开始
  • 类字段变量用前缀f开始
  • 局部变量不用前缀

修正后的代码样式应该是:

Java代码 
  1. public boolean equals (Object aOther) {  
  2.   if (! (aOther instanceof Range)) return false;  
  3.   Range other = (Range) aOther;  
  4.   return fStart.equals(other.fStart) && fEnd.equals(other.fEnd);  
  5. }  

 

这样的代码看起来一目了然,如果你没有一目了然,说明还是习惯问题,习惯养成了就好了。

 

不过作者的方案里,给类字段变量前面加 f 前缀,如果用代码生成工具生成get,set方法是会比较麻烦。get,set方法中我们不希望出现个f。不过这个问题可以用修改代码生成工具的方式解决。如果这个习惯普遍被java界接受,这些应该都不成问题了。

 

 

 

2.类成员的排序没有按照成员的作用域(scope) 的大小从大到小排列,而是喜欢把private放在前面。

 

作者举了一个常见的类样式:

Java代码 
  1. public class OilWell implements EnergySource {  
  2.    private Long id;  
  3.    private String name;  
  4.    private String location;  
  5.    private Date discoveryDate;  
  6.    private Long totalReserves;  
  7.    private Long productionToDate;  
  8.      
  9.    public Long getId() {  
  10.       return id;  
  11.    }  
  12.    public void setId(Long id) {  
  13.       this.id = id;  
  14.    }  
  15.      
  16.   //..elided  
  17. }  

 这种方式将private变量放在最前面。作者认为应该倒过来,把private变量的申明放在最后面。

 

因为人们认识一个事物的通常过程都是从一般到特殊,从抽象层次来说,是从高到底的认识过程。如果你倒过来的话,就不能从整体上把握事物,也不能抓住事物的本质,只能在一堆具体的片段事实中迷失。

 

整体的抽象允许你忽略细节。抽象的层次越高,你可以忽略越多的细节。读者阅读一个类时可以忽略的细节越多他会越高兴。脑袋里填充太多的细节是痛苦的,所以细节越少越好。因此,将private成员方在最后会显得更富有同情心,因为这样阻止了不必要的细节显露给读者。

 

原来C++程序的习惯也是把private成员放在最开始。然而,C++社区迅速的认识到这是一个有害的规范,这个规范现在已经被修正。(参看 a typical C++ style guide )

注意:public 接口应该放在class的最开始,其次是protected成员,最后是private成员。原因是:

  • 程序员应该更关心接口而不是具体实现。
  • 当程序员需要用一个类的时候,他们需要的是接口而不是实现。

把接口放在开始是非常有意义的。把实现部分,private 片段,放在开始是一个历史遗留问题。最后还是要反复强调一下,一个类的接口的重要性超过实现细节。

 

将私有成员放在类的开始是一个等待打破的怀习惯,它似乎是sun早期的编码规范造成的。

 

将代码按照javadoc的顺序编排是非常好的:首先是构造方法,然后是非私有方法,最后是私有字段和方法。这样读者阅读的时候很自然的从抽象层次的高向低运动。

 

程序员的7大坏习惯

转载:http://qimo601.iteye.com/blog/1555695写的太好了,最近我也一直在检讨自己的缺点。看来我有点盲目自大的倾向。后期一定要耐心听别人讲完,再发表意见。 所有的代码都...
  • dsanmux
  • dsanmux
  • 2015年07月27日 14:35
  • 686

改变自己的坏习惯

今天,我开始新的生活。今天,我爬出满是失败创伤的老茧。今天,我重新来到这个世上,我出生在葡萄园中,园 内的葡萄任人享用。今天,我要从最高最密的藤上摘下智慧的果实,这葡萄藤是好几代前的智者种下的。今天,...
  • bing19880122
  • bing19880122
  • 2009年12月19日 16:54
  • 398

如何改掉坏习惯?

如何改掉坏习惯?我也一直在思考这个问题,今天突然有点想通了…首先问大家一个问题:如何搬走房间内的黑暗呢? 请思考10秒钟再看下面的答案~没错!答案就是“引进光明,点一盏灯”。我想以我自身做一个例子:...
  • u011509781
  • u011509781
  • 2016年01月30日 11:52
  • 249

成功必须戒除的坏习惯

35岁以前成功必须戒除的9大恶习 坏习惯使成功寸步难行。 与建立良好习惯相应的,是克服不良习惯。不破不立,不改掉不良习惯,好习惯是难以建立起来的。 古希腊的佛里几亚国王葛第士以非常奇妙的方法,在战车的...
  • evolni4
  • evolni4
  • 2009年07月19日 13:13
  • 278

生活中有哪些坏习惯一旦改正就能带来立竿见影的好处?

作者:edmond 链接:https://www.zhihu.com/question/56000916/answer/150034675 来源:知乎 著作权归作者所有。商业转载请联系作者获得授...
  • haluoluo211
  • haluoluo211
  • 2017年03月17日 20:35
  • 1323

从未改变的坏习惯:断章取义

感觉IO流挺好学的,没想到,哪儿都栽坑,总是看了之后,感觉会了,自己没问题,大错特错!!!今天做的,是关于DataOutputStream DataInputStream 的东西,看了Tutorial...
  • zswjob126
  • zswjob126
  • 2013年11月18日 21:15
  • 571

学习的十大好习惯和坏习惯

Learning How to Learn: Powerful mental tools to help you master tough subjects 是UCSB在Coursera上开放的一门热...
  • dongfeink
  • dongfeink
  • 2015年03月05日 10:22
  • 921

如何改变坏习惯,形成新习惯

 你可以在别人落败的地方取得成功,你可以形成新习惯
  • 1satellite1
  • 1satellite1
  • 2009年02月10日 19:07
  • 721

更改java web项目编码的过程记录

最近在java web项目开发过程中遇到了很多非常让人头痛的问题。其中一个就是项目编码更换问题。此篇文章记录了整个项目编码码更换的过程。 本来在项目使用的UTF-8编码,一切是如此的完美,但由于种种...
  • Lbeta
  • Lbeta
  • 2012年04月06日 14:31
  • 1458

《得到》5个帮你改变坏习惯的方法

每天清晨都会听《得到》的文章,今天听到的这篇改变坏习惯的文章,深有感触,觉得有必要分享一下~ 以下是原文 习惯会在不知不觉中影响人的行为。假如你在看电影时有吃爆米花的习惯,不管手边的爆米花好不好吃...
  • ljw_Josie
  • ljw_Josie
  • 2017年12月15日 11:22
  • 56
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:改变编码坏习惯
举报原因:
原因补充:

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