Java开发者须要坚守的十大准则

1、为代码加注释。
    虽然每一个人都知道这点,但有时却不自觉忘了履行,今天你“忘了”加注释了吗?虽然注释对程序的功能没什么“贡献”,但过一段时间,好比说两星期以后或者更长,回过头来看看本身的代码,说不定已经记不住它是干什么的了。若是这些代码是你我的的,那还算是走运了,不幸的是,固然了,大多数时候都是别人的不幸,不少时候你们都是在为公司写代码,写代码的人也许早已经离开了公司,但别忘了一句古话,有来有往嘛,为他人,也为咱们本身,请为你的代码加上注释。

2、不要让事情复杂化。
    程序员有时候老是对简单问题想出复杂的解决方案,好比说,在只有五个用户的程序中引入EJB、对程序实现了并不须要的框架(framework),之类的还有属性文件、面向对象解决方案、多线程等等。为何要这样作呢?也许咱们并不知道是否这样会更好,但这样作也许能够学到一些新东西,或者让本身更感兴趣一些。若是是不知道为何这样作,建议多请教经验丰富的程序员,若是是为了我的的目的,麻烦让本身更专业一点。

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_C; 
public boolean methodA(String sParam1){
if (A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){
return true; 
}
return false; 
}
}
  如今,每次须要将“ABC”与其余变量进行比较时,没必要记住实际代码,直接引用A.S_CONSTANT_ABC就好了,并且在从此须要进行修改时,也可在一处修改,不会翻遍整个源代码逐个修改了。

5、不要“创造”本身的框架(framework)。
    确切来讲,有数以千计的各类框架存在,并且大多数是开源的,这些框架都是优秀的解决方案,可用于平常程序开发中,咱们只需使用这些框架的最新版本就好了,至少表面上要跟上形势吧。被你们广为接受的最为明显的一个例子就是Struts了,这个开源web框架很是适合用在基于web的应用程序中。是否是想开发出本身的Struts呢,仍是省点力气吧,回头看看第二条——不要让事情复杂化。另外,若是正在开发的程序只有3个窗口,就不要使用Struts了,对这种程序来讲,不须要那么多的“控制”。

6、不要使用println及字符串链接。
    一般为了调试方便,开发者喜欢在可能的全部地方都加上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++) {
System.out.println(someValue = someValue + i); 
}
}
public static void calculationWithOutPrint(){
double someValue = 0D; 
for (int i = 0; i < 10000; i++) {
someValue = someValue + i; 
}
}
public static void main(String [] n) {
BadCode.calculationWithPrint(); 
BadCode.calculationWithOutPrint(); 
}
}
  从测试中能够发现,方法calculationWithOutPrint()执行用了0.001204秒,做为对比,方法calculationWithPrint()执行但是用了10.52秒。
  要避免浪费CPU时间,最好的方法是引入像以下的包装方法:
public class BadCode {
public static final int DEBUG_MODE = 1; 
public static final int PRODUCTION_MODE = 2; 
public static void calculationWithPrint(int logMode){
double someValue = 0D; 
for (int i = 0; i < 10000; i++) {
someValue = someValue + i; 
myPrintMethod(logMode, someValue); 
}
}
public static void myPrintMethod(int logMode, double value) {
if (logMode > BadCode.DEBUG_MODE) { return; }
System.out.println(value); 
}
public static void main(String [] n) {
BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE); 
}
}
  另外,字符串链接也是浪费CPU时间的一个大头,请看下面的示例代码:
public static void concatenateStrings(String startingString) {
for (int i = 0; i < 20; i++) {
startingString = startingString + startingString; 
}
}
public static void concatenateStringsUsingStringBuffer(String startingString) {
StringBuffer sb = new StringBuffer(); 
sb.append(startingString); 
for (int i = 0; i < 20; i++) {
sb.append(sb.toString()); 
}
}
  在测试中可发现,使用StringBuffer的方法只用了0.01秒执行完毕,而使用链接的方法则用了0.08秒,选择显而易见了。

7、多关注GUI(用户界面)。
    再三强调,GUI对商业客户来讲,与程序的功能及效率同等重要,GUI是一个成功程序的最基本部分,而不少IT经理每每都没注意到GUI的重要性。在现实生活中,许多公司可能为了节省开支,没有雇用那些有着设计“用户友好”界面丰富经验的网页设计者,此时Java开发者只能依赖他们自身的HTML基本功及在此领域有限的知识,结果,不少开发出来的程序都是“计算机友好”甚于“用户友好”。不多有开发者同时精通软件开发及GUI设计,若是你在公司“不幸”被分配负责程序界面,就应该遵照下面三条原则:
  一、 不要再发明一次轮子,即不作无用功。现有的程序可能会有相似的界面需求。
  二、 先建立一个原型。这是很是重要一步,用户通常想看到他们将使用的东西,并且能够先利用这个原型征求用户的意见,再慢慢修改为用户想要的样子。
  三、 学会换位思考。换句话来讲,就是从用户的角度来审查程序的需求。举例来说,一个汇总的窗口能够跨页或者不跨页,做为一个软件开发者,可能会倾向于不跨页,由于这样简单一些。可是,从用户的角度来看,可能不但愿看到上百行数据都挤在同一页上。

8、文档需求不放松。
    每一个商业需求都必须记录在案,这可能听上去像童话,彷佛在现实生活中很难实现。而咱们要作的是,无论开发时间多紧迫,无论最终期限多临近,对每一个商业需求都必须记录在案。

9、单元测试、单元测试、单元测试。
    关于什么是单元测试的最好方法,在此不便细说,只是强调,单元测试必定要完成,这也是编程中最基本的原则。固然了,若是有人帮你作单元测试天然是最好,若是没有,就本身来作吧,当建立一个单元测试计划时,请遵照如下三条最基本的原则:
  一、 先于编写类代码以前编写单元测试。
  二、 记录单元测试中的代码注释。
  三、 测试全部执行关键功能的公有方法,这里不是指set和get方法,除非它们是以本身独特方式执行set和get方法。

10、质量,而不是数量。
    有些时候由于产品问题、期限紧迫、或一些预料以外的事情,致使经常不能按时下班,但通常而言,公司不会由于雇员常常加班而对之表扬和奖励,公司只看重高质量的工做。若是遵照了前九条原则,你会发现本身写出的代码bug少且可维护性高,无形中质量提升了一大步。
相关文章
相关标签/搜索