`

Java开发者需坚守的十大基本准则

阅读更多

有许多标准和实践准则可适用于Java开发者,但此处要说的,是每个Java开发者需坚守的基本原则。

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

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

  三、始终牢记——“少即是好(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和两个花括号,但代码的可读性与可理解性就一下子提高了一大截。

  四、请不要硬编码。开发者经常有意“忘记”或忽略掉这点,因为有些时候开发日程逼得实在太紧。其实,多写一行定义静态变量的代码能花多少时间呢?

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”与其他变量进行比较时,不必记住实际代码,直接引用A.S_CONSTANT_ABC就行了,而且在今后需要进行修改时,也可在一处修改,不会翻遍整个源代码逐个修改了。

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

  六、不要使用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秒,选择显而易见了。

  七、多关注GUI(用户界面)。再三强调,GUI对商业客户来说,与程序的功能及效率同等重要,GUI是一个成功程序的最基本部分,而很多IT经理往往都没注意到GUI的重要性。在现实生活中,许多公司可能为了节省开支,没有雇用那些有着设计“用户友好”界面丰富经验的网页设计者,此时Java开发者只能依赖他们自身的HTML基本功及在此领域有限的知识,结果,很多开发出来的程序都是“计算机友好”甚于“用户友好”。很少有开发者同时精通软件开发及GUI设计,如果你在公司“不幸”被分配负责程序界面,就应该遵守下面三条原则:

  1、 不要再发明一次轮子,即不做无用功。现有的程序可能会有类似的界面需求。

  2、 先创建一个原型。这是非常重要一步,用户一般想看到他们将使用的东西,而且可以先利用这个原型征求用户的意见,再慢慢修改成用户想要的样子。

  3、 学会换位思考。换句话来说,就是从用户的角度来审查程序的需求。举例来讲,一个汇总的窗口可以跨页或者不跨页,作为一个软件开发者,可能会倾向于不跨页,因为这样简单一些。但是,从用户的角度来看,可能不希望看到上百行数据都挤在同一页上。

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

  九、单元测试、单元测试、单元测试。关于什么是单元测试的最好方法,在此不便细说,只是强调,单元测试一定要完成,这也是编程中最基本的原则。当然了,如果有人帮你做单元测试自然是最好,如果没有,就自己来做吧,当创建一个单元测试计划时,请遵守以下三条最基本的原则:

  1、 先于编写类代码之前编写单元测试。

  2、 记录单元测试中的代码注释。

  3、 测试所有执行关键功能的公有方法,这里不是指set和get方法,除非它们是以自己独特方式执行set和get方法。

  十、质量,而不是数量。有些时候因为产品问题、期限紧迫、或一些预料之外的事情,导致常常不能按时下班,但一般而言,公司不会因为雇员经常加班而对之表扬和奖励,公司只看重高质量的工作。如果遵守了前九条原则,你会发现自己写出的代码bug少且可维护性高,无形中质量提高了一大步。

分享到:
评论

相关推荐

    阿里巴巴java开发者手册

    阿里巴巴JAVA开发者手册,让你从小白变成大牛。P路直升。 阿里巴巴JAVA开发者手册,让你从小白变成大牛。P路直升。 阿里巴巴JAVA开发者手册,让你从小白变成大牛。P路直升。阿里巴巴JAVA开发者手册,让你从小白变成...

    java开发者文档

    Java开发者文档集合是一个非常重要的资源库,对于任何从事Java编程,特别是J2EE应用开发的程序员来说,都是不可或缺的参考资料。这个压缩包包含了几个关键框架和技术的官方文档,分别是Struts 2.0 API、JAVA API官方...

    Java Development Kit: Java开发者工具包

    Java 的产品叫JDK(Java Development Kit: Java开发者工具包),必须安装JDK才能使用java。目前比较稳定的版本为 JDK17. 我这个是JDK17.0.9这个版本

    Java开发者必备的六款工具

    Java开发者必备的六款工具 xmlmarker_1_1_setup sqldeveloper portecle-1.7 Notepad_6.7.9 KeyTool_GUI_1.6 工具和教程 jad v1.5.8g eclipse 官网:http://www.eclipse.org/downloads/

    Git常用命令详解与实战技巧-Java开发者面试必备工具

    适合人群:主要面向Java开发者,尤其是准备参加大型互联网公司如BAT面试的技术人员。 使用场景及目标:帮助开发者在日常工作中高效地进行代码版本管理,同时为面试做好充分准备。通过学习这些命令,可以更好地理解和...

    Java开发者学习路线图 / Java Developer Roadmap @ShowMeAI研究中心

    这是 ShowMeAI 持续分享的速查表系列!本速查表是《Java开发者学习路线图》,是 Java 语言开发者的成长路线图,包括中文版本和英文版本。内容丰富,脉络清晰,可视化效果很酷炫!值得下载和收藏~

    读书笔记:《阿里巴巴java开发者手册》嵩山版.zip

    读书笔记:《阿里巴巴java开发者手册》嵩山版

    基于Java语言的KnShare开发者工具集设计源码

    Java语言的KnShare开发者工具集设计源码项目是为Java开发者量身打造的工具集合,它通过整理和封装开发过程中常见的技术点,为开发者提供了一系列便捷的工具方法,以此提高编码和调试的效率。该项目总共由22个文件...

    JDK_API_1_6_zh_CN,JavaTM 2 Platform Standard Edition 6,是JAVA开发者的必备资料!

    JDK_API_1_6_zh_CN,JavaTM 2 Platform Standard Edition 6,是JAVA开发者的必备资料!

    微信 java web端开发者工具

    java开发微信接口工具,亲试可用

    javaCV所需的所有jar包

    这个压缩包包含的是一系列JavaCV所需的jar包,这些库使得Java开发者能够轻松地进行图像处理、视频分析以及计算机视觉相关的任务。以下是对这些知识点的详细说明: 1. **JavaCV**: JavaCV 是一个开源项目,由...

    Java框架对初级开发者的束缚及化解策略.pdf

    "Java框架对初级开发者的束缚及化解策略" Java框架对初级开发者的束缚及化解策略是指在Java语言技术中,初级开发者在使用Java框架时,容易受到框架的束缚,限制了自己的思想和设计思路,无法按照自己的想法进行软件...

    java个人简历无法修改

    Java个人简历无法修改是指在 Java 开发者的个人简历中无法进行修改或更新个人信息、技能、经验等内容的现象。这种情况可能是由于简历的格式或结构限制所致,或者是因为个人简历中的信息过于老旧,需要更新以适应新的...

    开发者突击:Java Web主流框架整合开发(第2版).pdf

    开发者突击:Java Web主流框架整合开发(第2版).pdf

    Java API文档 中文网页版

    Java API文档是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)中的所有类、接口、方法和常量的详细说明。这份中文网页版的Java API文档为中国的开发者提供了便利,无需通过英文版本来学习和查找API信息,...

    JAVA核心技术.pdf

    Java语言的基本语法是学习Java的第一步,了解Java语言的基本语法可以帮助开发者更好地掌握Java语言。 2. Java面向对象编程:Java语言支持面向对象编程(OOP),它可以模拟现实世界中的对象和关系。面向对象编程的...

    -books-Java核心知识点整理(包括Java基础、JVM、数据库、计算机网络、

    了解操作系统的基本原理,有助于开发者更好地掌握Java程序如何与底层系统交互。 设计模式是软件开发中用来解决特定问题的一组经验规则和模板。Java开发者需要熟悉常用的23种设计模式,理解每种模式解决的问题和适用...

    2018年Java就业前景分析共2页.pdf.zip

    此外,Java EE(Enterprise Edition)的持续演进,如Java EE 8的发布,为Java开发者提供了更强大的工具和标准,进一步提升了Java在企业级开发中的地位。同时,Spring框架的流行,让Java开发者有更多的选择去构建高效...

    Java卡API_V2.2.1

    Java卡API_V2.2.1 Java卡API_V2.2.1是Java卡应用程序接口(API)的规范,提供了Java卡平台API的中文译本。...Java卡API_V2.2.1提供了Java卡平台API的详细规范和实现,旨在帮助开发者更好地使用Java卡技术。

    Java7编程高级进阶

    Java进阶必备,适合有一定基础的Java开发者。Java进阶必备,适合有一定基础的Java开发者。

Global site tag (gtag.js) - Google Analytics