日期:2014-05-20  浏览次数:20654 次

Java程序开发者需要了解的十大清规戒律
对Java开发者来说,有许多的标准和最佳实践。本文列举了每一个开发人员必须遵从的十大基本法则;如果有了可以遵从的规则而不遵从,那么将导致的是十分悲惨的结局。  


1.   在你的代码里加入注释  

每个人都知道这点,但不知何故忘记了遵守。算一算有多少次你“忘记”了添加注释?这是事实:注释对程序在功能上没有实质的贡献。但是,你需要一次又一次的回到你两个礼拜之前写的代码上来,可能一辈子都是这样,你一定记不住这些代码为什么会这样。如果这些代码是你的,你还比较的幸运。因为它有可能让你回忆起。但是不幸的是,很多时间,这些代码是别人的,而且很有可能他已经离开了公司。  


2.   不要让事情复杂化  

我以前就这么干过,而且我相信所有的人都这么干过。开发人员常常为一个简单的问题而提出一个解决方案。我们为仅仅只有5个用户的应用而引入EJBs。我们为一个应用使用框架而它根本不需要。我们加入属性文件,面向对象的解决方案,和线程到应用中,但是它根本不需要这些。为什么我们这样做?我们中的一些人是因为不知道怎么做更好,但是还有一些人这样做的目的是为了学习新的知识,从而使得这个应用对于我们自己来说做得比较有趣。  


3.   牢牢记住——“少即是多(less   is   more)”并不永远是好的  

代码的效率是一伟大的事情,但是在很多情况下,写更少的代码行并不能提高该代码的效率。请让我向你展示一个简单的例子。  


if(newStatusCode.equals( "SD ")   &&   (sellOffDate   ==   null   ||  
todayDate.compareTo(sellOffDate) <0   ||   (lastUsedDate   !=   null   &&  
todayDate.compareTo(lastUsedDate)> 0))   ||  
(newStatusCode.equals( "OBS ")   &&   (OBSDate   ==   null   ||  
todayDate.compareTo(OBSDate) <0))){
newStatusCode   =   "NYP ";
}
 


我想问一句:说出上面的那段代码的if条件想干什么容易吗?现在,我们再来假设无论是谁写出这段代码,而没有遵从第一条规则——在你的代码里加入注释。  

如果我们把这个条件分到两个独立的if陈述句中,难道不是更简单一些吗?现在,考虑下面的修正代码:  


if(newStatusCode.equals( "SD ")   &&   (sellOffDate   ==   null   ||  
todayDate.compareTo(sellOffDate) <0   ||   (lastUsedDate   !=   null   &&  
todayDate.compareTo(lastUsedDate)> 0))){
newStatusCode   =   "NYP ";
}else  
if(newStatusCode.equals( "OBS ")   &&   (OBSDate   ==   null   ||  
todayDate.compareTo(OBSDate) <0))
{
newStatusCode   =   "NYP ";
}
 


难道它不是有了更好的可读性?是的,我们重复了陈述条件。是的,我们多出了一个多余的“IF”和两对多余的括弧。但是代码有了更好的可读性和可理解性。  


4.   请不要有硬代码  

开发人员常常有意识的忘记或者忽视这条规则,原因是我们,和一般时候一样,在赶时间。如果我们遵从这条规则,我们可能会赶不上进度。我们可能不能结束我们的当前状态。但是写一条额外的定义静态常量的代码行又能花费我们多少时间呢?  

这里有一个例子。  

public   class   A   {  


public   static   final   String   S_CONSTANT_ABC   =   "ABC ";  


public   boolean   methodA(String   sParam1){  

if(A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){  

return   true;  

}  

return   false;  

}  

}  

现在,每一次我们需要和某一些变量比较字符串“ABC”的时候,我们只需要引用S_CONSTANT_ABC,而不是记住实际的代码是什么。它还有一个好处是:更加容易在一个地方修改常量,而不是在所有的代码中寻找这个代码  


不要发明你自己的frameworks  


已经推出了几千种frameworks,而且它们中的大多数是开源的。这些frameworks中间有很多是极好的解决方案,被应用到成千上万的应用中。你们需要跟上这些新frameworks的步伐,最起码是肤浅的。在这些极好的、应用广泛的frameworks中间,一个最好的、最直接的例子是Struts。在你所能想象到的frameworks中,这个开源的web   frameworks对于基于web的应用是一个完美的候选者。但是你必须记住第二条规则——不要让事情复杂化。如果你开发的应用只有三个页面—请,不要使用Struts,对于这样一个应用,没有什么“控制”请求的。  


6.   不要打印行和字符串相加  

我知道,为了调试的目的,开发人员喜欢在每一个我们认为适合的地方添加System.out.println,而且我们会对我们自己说,会在以后删掉这些代码的。但是我们常常忘掉删去这些代码行,或者我们根本就不想删掉它们。我们使用System.out.println来测试,当我们测试完成以后,为什么我们还能接触到它们呢?我们可能删掉一行我们实际需要的代码,仅仅是因为你低估了System.out.println所带来的伤害,考虑下面的代码:  


public   class   BadCode   {
public   static   void   calculationWithPrint(){
double   someValue   =   0D;
for   (int   i   =   0;   i   <   10000;   i++)   {