引言
代码编写风格主要包括变量、方法、类等语言实体的命名和代码排版布局两方面。评价代码质量的高低不仅取决于算法和数据结构,代码排版布局也是一个不可或缺的方面。随着现代软件规模的扩大,团队开发在所难免,好的代码编写风格增强了代码可读性和维护性,提高了团队协作的效率。
JBuilder被誉为java航空母舰级的开发工具,目前的最高版本是10,命名为JBuilderX。本文着重介绍如何在JBuilderX中美化代码,格式化代码排版布局,同时还将介绍JBuilderX加速代码编写的一些实用技巧。
代码美化工具
市面上已经有很多代码美化的工具软件,比较著名的有Indent、astyle、jalopy、SourceFormatX 等,其中SourceFormatX是一个多语言的代码美化工具。但这些工具没有和开发工具很好的集成,且不易操作,功能也不够强大或不针对专门的java语言。JBuildeX集成了一个强大的代码排版布局格式化工具,在您编写好代码后,可以通过它来美化您的代码。它可以对代码做以下7个方面的格式化工作:
1) 缩进:java代码以"{}"划分的不同代码子域,里层的域比外层的域需要缩进一些,以使代码有层次感,通过该工具可以定义里层相对外层代码缩进的空格数,Tab键对应的空格数;
2) 分行:类定义、方法定义以及控制代码,如if..else, while ,try.. catch等都有对应的"{}",以组织其代码区域,您可以指定"{"和"}"是否另起一行;
3) 空格:指定在操作符、小括号"()"、中括号"[]"、分号";"等符号和操作代码之间是否需要空格;
4) 空行:允许您指定代码里哪儿需要加入空行以及空行数,使不同的代码域之间区分得更加清晰;
5) 换行对齐:指定代码行的最大列数,超过列数的代码行会被智能拆分成多行,只有包含了操作符或逗号的代码行才可以被换行。您可以指定换行点是在这些符号前面还是后面,同时,您还可以设定换行后多行的对齐方式;
6) 代码生成规则:控制自动事件句柄、变量可视域及javaBean实例化的代码生成规则;
7) import代码优化规则:控制类中import代码引入的包和类如何生成及它们排序的先后顺序,以优化import代码段。
创建java工程后,在主窗口左上角的工程面板的工程文件(xxx.jpx)上点击鼠标右键,按以下操作调出代码美化工具设置界面:
选择Properties->在弹出窗口左边的树中选择Fomatting,得到如图1的操作窗口界面:
图1. 代码格式化窗口
窗口的右边有7个页标签,分别对应上面所谈到的7个方面的代码设置。每一个设置页左边对应若干个设置项,右边是代码格式化的预览效果,这样您就可以即时了解设置项是如何影响代码的排版布局。
使用代码美化工具美化代码
下面是一个简单的java类代码,其功能非常简单,是将两个双精度数按要求相加或相减,再将其结果值四舍五入为一个整数,该例子只是为了演示代码格式化,您大可不必追究代码的功能。
package format;
import java.lang.Math;
import java.util.*;
public class FormatSample {
private int i;
private int j;
public FormatSample() {}
public long add(double i,double j,boolean isAdd){
double k ;
if(isAdd){k=i+j;}
else{k=i-j;}
System.out.println("today is "+((new Date()).toString())+"the operation of"+i+(isAdd?"+":"-"+"")+j+" equals "+k);}}
这段代码的排版布局非常差,虽然只是一小段,也会给阅读者造成晕旋效果。这一小段代码在布局上的症结可以归纳为以下几项:
1)里外层代码域处于相同列,没有用缩进形成层次布局
2) if..else的代码块的大括号"{"及"}"和代码处于同一行
3) 操作符和操作数之间没有用空格分开
4) import代码块 和 class定义以及方法和方法代码块之间没有空行分隔,挤成一团
5) System.out.println那行太长,在IDE窗口中需要移动水平滚动条才可以看到隐藏的代码
6) import 的代码行引入了过多的类,FormatSample类只需要引入java.util.Date这个类就可以了。
对以上这些排版布局缺陷进行修正我们希望得到了以下版本的的代码:
package format;
import java.util.Date;
public class FormatSample
{
private int i;
private int j;
public FormatSample()
{
}
public long add(double i, double j, boolean isAdd)
{
double k;
if (isAdd)
{
k = i + j;
}
else
{
k = i - j;
}
System.out.println("today is " + ( (new Date()).toString())
+ "the operation of" + i
+ (isAdd ? "+" : "-" + "") + j + " equals " + k);
return Math.round(k);
}
}
我们通过以下设置步骤来格式化FormatSample类的代码,在设置代码格式化后,必须在代码页面中点击鼠标右键,选择Format All按钮格式化代码。你也可以在项目窗口的树中选择<Project Source>项,并点击右键,选择Format package" <Project Source>"...来格式化整个项目的所有代码:
图2. 格式化整个项目的代码
1) 使代码里外层代码区域形成层级缩进的布局
切换到代码美化工具设置界面的Basic标签页,设置block indent的缩进空格数,默认的里层代码比外层代码缩进2个空格,这对于使用拉丁语系的国家是比较适合的,对于使用汉语的编程者应用调成4个空格会更好一些,因为2个空格才对应一个汉字的长度。
2) 使代码块的正反大括号"{"和"}"放置在新行中,并且使对应的大括号在列上对齐。
切换到Blocks的标签面,将左边树的所有复选框都钩选,这样所有大括号都会另起一行,而且成对的大括号会在列上对齐。通过在列上对应的成对大括号,我们能够非常容易划分出代码块。将所有大括号(除数组初始化的大括号外)另起一行放置比不另起一行放置的代码可读性更强。我认为在下面的两种代码布局形式中,右边的代码比左边的代码具有更好的可读性:
if(true){
/**do sth*/
}
else{
/**do sth*/
}
if(true)
{
/**do sth*/
}
else
{
/**do sth*/
}
3) 操作符和操作数之间插入空格
切换到Spaces标签页,该页面左边选项树从上到下分为5个设置项组,分别设置代码中分号";"前后的空格,小括号"()"和方法名、关键词及里面嵌套小括号之间的空格,逗号","前后的空格,小括号和中括号和其包含的代码之间的间距空格,归为Others的一些杂项空格项目的设置。通过点击设置项前的复选框,右边的预览窗口将给出设置后的代码效果。下图是我们代码格式化所用的设置:
图3. 空格设置界面
4) 在代码不同部分之间插入空行
java语言的结构化相比于C,Pascal等其他语言的结构都要清晰严谨。代码组织结构按先后顺序依次是包定义、引用类加载、类声明、全局变量声明和方法声明。可以在这些不同部分的代码间插入空行,使代码不同部分看起来一目了然。空行的设置在Blank Lines的标签页中,在这个页面中你不但可以设置在哪儿插入空行,还可以设置插入空行的数目。如您可以在import代码部分和类定义代码部分之间加入两个空行,全局变量定义代码之间可不插入空行,方法和方法之间插入一个空行。
5) 让太长的代码行自动换行
代码编写窗口大小有限,太长的代码行需要移动水平滚动条才可以查看。将代码窗口滚动到右边时,左边的代码又看不到了,造成"神龙见首不见尾"的现象,严重影响代码的可读性和阅读效率。JBuilderX在Fomatting窗口的Wrapping标签页中提供了智能换行的设置功能。您可以在Wrap after column中设置代码行的长度,还可以设置代码行换行的依据符号。代码行中的逗号,操作符是代码行自动换行的依据符。
JBuilderX在自动换行中提供的另一个精制的功能:可以指定单行拆分成多行后,这些行的对齐方式,你可以指定多行头部和"("对齐或和"="对齐,建议将两者都钩选。格式化后,例子中的System.out.println("…")代码行变成了三行,后两行代码和"("对齐。
6) 优化import代码块
切换到Formatting窗口的最后一个Imports标签页,对import代码块做优化设置。JVM会自动加载java.lang.*包,所以例子中的import java.lang.Math;是多余的,此外类中只用到java.util.*包中的一个类java.util.Date,无需引入包中的其他类。JBuilderX的import代码优化功能允许你设置一个阈值,在当前类中引用到包中的类数目小于这个阈值时,它就会将包名后的"*"替换成具体的类名。您也可以通过钩选设置页面中的Always import classes复选框使import在任何时候都将包后的"*"替换成具体的类名。(注意:通过在代码窗口中点击右键选择Format All格式化代码,不执行import代码的优化设置,你可以在代码窗口中按Ctrl+I快捷键或用图2的操作步骤来执行import代码的优化)