程序的可读性:为什么要强调Java编程风格

学会Java的基础语法后,初学者可以编写一些简单的Java代码。虽然只要满足基本语法要求,Java程序就可以编译和运行,也就是说Java对程序代码的格式(例如代码中的空格、空行、回车)并没有强制要求,对变量或类的命名也没有强制规定(除了满足标识符的规定外),初学者往往任意添加这些空白,任意命名变量或类名,这严重损害了程序代码的可读性。

你还能一眼看出下面是你熟悉的HelloWorld程序吗?

程序的可读性,不是看起来好看那么简单。程序开发者大量的工作时间并不是在编写代码,而是阅读代码,调试代码。

“时间==金钱”,让他人阅读可读性很差的代码,实际上是在浪费他人的时间。

当阅读代码时,程序阅读者实际上是充当代码解释器的角色(虽比不上计算机);在他们的头脑中执行代码,并试图记住当前执行状态。这就是开发者在阅读代码过程中被打搅而脾气暴躁的原因。

程序提高可读性的目的是:降低他人或自己阅读程序代码的难度。具有良好可读性的程序,即使自己在很长时间后,再来读程序也会一目了然,他人也可以很容易从中看出程序的思路和意图。

提高Java程序的可读性,就需要对Java程序的编程风格有所规范,主要包含4个方面:排版、命名、注释、逻辑。具体来说就是:

(1)注意代码的排版,主要是代码的缩进和空白的使用;

(2)注意变量或类的命名,遵循命名规范;

(3)注意添加合适的注释,适当的说明代码的意图;

(4)采用一些常见的逻辑和算法,少用罕见的实现。

下面就Java编程中的场景,具体描述和举例说明如下:

(1)排版

上面这段代码中,整个程序的层次和所属关系就很明显。

Ø第2行的public class属于类声明,是顶格的;

Ø第4行的main()方法声明缩进4个空格;

Ø第5和第6行的方法调用属于main()方法的方法体,它们相对于方法声明多缩进4个空格(相对整个文件来说缩进8个空格);

Ø第9行的printStars()这行方法的声明和main()方法声明一样缩进4个空格;

Ø第10到13行的代码属于方法内部的方法体,相对于printStars()方法声明行多缩进4个空格(相对整个文件来说缩进8个空格);

Ø第11行的循环体相对于第10行的for(int i=0; i

Ø第4到7行的main()方法和第9到14行的printStars()方法都属于整个类,是并列的关系;这两个方法之间可以加一个空行(第8行),以示区分。

也就是说,从属关系用缩进4个空格来表示,并列关系应该有相同的缩进空格数。在Eclipse下默认用键盘上的Tab键就能一次缩进4个空格。其实,所有以上这些代码的格式化工作可以在Eclipse下自动完成,方法是点击菜单上的Source-->Format,或者直接按下键盘上的快捷键(Ctrl+Shift+F)

此外,在书写表达式时,也可以添加空白和小括号来提高可读性,例如:

int a=3, b=4;

int c=3+a>b?555:666; // c的运算结果是555

计算c的结果时,尽管三目运算符?:的优先级低于加法+,但如下写法的可读性显然更好:

(2)命名

这里指的是变量、方法或类的命名。尽管Java中变量、方法和类的命名只需要满足标识符的命名规定,但是Java的命名规范还有:

Ø变量名的首字母小写,由多个单词连接起来时从第二个单词开始每个单词的首字母大写,例如lineNumber,userName。

Ø方法名的规范与变量名类似,首字母小写,由多个单词连接起来时从第二个单词开始每个单词的首字母大写,为了表示方法完成的动作,一般第一个单词是个动词,例如printLineNumber( ), startEngine()。

Ø类名(接口名)的首字母大写,由多个单词连接起来时每个单词的首字母大写,例如HelloWorld,LoginUserAction。

此外,虽然初学者写的几行的简单程序中可以使用一些如a, b, c, m, n, p, q这些单字母的变量,但程序如果长了的话,还是应该使用有意义的英文单词来定义标识符,例如userName表示用户名,authorOfBook表示书籍作者。

循环变量如果没有特殊意义可以用i或j。

用汉语拼音来写标识符不是特别推荐,因为中文汉语拼音存在多音字的情况,例如shuMing作为变量名,就不太容易知道是“书名”还是“署名”。

(3)注释

合适的注释可以说明程序的意图。初学时可以在自己理解模糊的地方添加一些单行注释,等到跨越基本语句的理解阶段,对一些简单语句就不应添加过多注释,就应该用程序本身的逻辑来说明,过多的注释反而会转移代码阅读者的注意力。

文档注释可以通过javadoc工具生成HTML格式的文档,应该遵循javadoc格式的规范书写文档注释。一般,用javadoc工具前,在类前面或方法声明前面要添加文档注释,说明类、方法、方法参数的作用。

(4)逻辑

同样的程序功能可以用不同的程序逻辑来实现。在编程前,应该理清思路,用一些常用的逻辑编写,例如变量的值交换的代码:

int tmp = n1;

n1=n2;

n2=tmp;

这三行代码用中间变量实现n1和n2两个变量的值交换,属于常用逻辑,学习过基本程序设计的人都知道它的作用。其实还有一些变量的值交换的方法,如位运算的方式实现交换,属于不常用的逻辑,应减少使用。

另外,重复率高的代码,应该考虑将它们放入一个方法中以供调用。在面向对象的程序设计中,还有很多提高代码复用的方法,如设计模式等,这将在以后介绍。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180313G08DY900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券