关键词 jbuilderx 代码格式化 代码美化 代码模板
引言
代码编写风格主要包括变量、方法、类等语言实体的命名和代码排版布局两方面。评价代码质量的高低不仅取决于算法和数据结构,代码排版布局也是一个不可或缺的方面。随着现代软件规模的扩大,团队开发在所难免,好的代码编写风格增强了代码可读性和维护性,提高了团队协作的效率。
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代码的优化) 其他加速代码编写及排版布局的技巧
1) 用模板加速代码的录入,保证排版布局上的一致性
jbuilderx提供了丰富的代码模板,通过代码模板可以快速地录入常用的代码块。jbuildex的代码模板库提供了大量的常用的代码模板,代码模板库允许你对代码模板进行维护:对已有模板进行更改或新增自定义的代码模板。您可以通过以下操作调出代码模板库:tools->preferences....->选择弹出窗口左边树的templates,如:
![]() 图4. 代码模板维护窗口 |
您可以在这个界面中对java,html以及其他通用的代码模板进行维护,一个模板定义包括3项内容:模板名字、模板描述以及模板定义体。如图4中的if..else模板的名字是ife,描述为if else,模板体为:
if (|) { |}else { |}
其中字符"|"是代码模板调用后光标所在的位置,光标停在第1个"|"处,可以按tab键移动光标到不同的"|" 处。在代码编辑窗口按ctrl+j再键入模板的名字就可以调用模板代码,模板ife调出后在编辑器中的显示效果如下图:
![]() 图5. 按ctrl+j调用代码模板(再按enter选择) |
![]() 图6. 代码模板ife的编辑效果图 |
2) 同步编辑模式
如果一段代码中一个标识符出现多次,当需要更改这个标识符时,同步编辑模式可以给您带来极大的方便。如下面是一段遍历iterator的代码:
| iterator iter = .iterator(); while (iter.hasnext()) { object item = (object)iter.next(); } |
如果您需要将iter名字改为myiter,你可以先选中这段代码,然后按ctrl+shift+j,这个代码段就进入了同步编辑模式,在同步编辑模式下只要更改其中任何一个标识符其他相同的标识符也会同步更改。在编辑窗口中,这段代码显示效果如下:
![]() 图7. 同步编辑模式 |
这段代码中iter变量出现了3次,第一个iter呈选中状态,您只要将任何一个更改为myiter,其他的iter也跟着更改过来。如果你想退出同步编辑模式,请点击编辑窗口左边标有行数栏中的
按钮。3) 代码段整体移动
在一般的编辑器中(如ultraedit,editplus)都提供了整段代码整体左移和右移的操作,操作的方式是选中需要移动的代码段,然后按tab向右移或按shift+tab向左移。jbuilderx也提供了这个功能,但操作键略有不同,向右移的按键是ctrl+shift+i,向左移可以通过shift+tab或ctrl+shift+u两种操作方式来实现。代码整体移动对于缩进的排版特别有帮助。
总结
jbuilderx是一个功能强大的java智能开发环境,它提供的代码美化工具可以对代码进行高效的美化排版布局,大大地减轻了开发人员代码排版布局的工作,保证了团队不同成员间编辑代码布局风格的一致性。使用好这个工具必将给您的java开发带来效率上的提升和质量上的优化。







闽公网安备 35060202000074号