Java 代码规范,你应该知道的一些工具和用法

3,665 阅读7分钟

从事编程这个行业,你一定被别人说过或者说过别人这句话:代码要规范!求职面试时也能从 JD 上看到这个要求:要有良好的编程习惯。其实都是在讲代码规范(Code Style)这件事情。

每个人都有自己的编程习惯,比如你喜欢 2 个空格数量的行前缩进,而他喜欢 4 个空格数量的行前缩进;你喜欢左大括号位于行尾出,而他喜欢另起一行。等等,这些习惯都没有孰优孰劣之分,只是每个人长期以往形成的个人编程爱好而已。

当你独立开发一个项目时,谈不上代码规范,按照你个人的编程习惯即可。但是,如果是多人协作、共同开发一个项目,如果没有统一的代码规范的话,项目中的每个人都按照自己的习惯率性而为,就会导致整个项目的代码看上去杂乱无章,可读性非常差,并且持续增加后续的维护成本。

所以,在团队协作时,常常会涉及到代码规范。通常,一个公司也会拥有一份统一的代码规范。事实上,根据经验,使用代码规范在一定程度上还能减少 BUG 数量,降低错误率。本篇文章,我们就来讲讲如何在 Android 项目中使用代码规范,主要是 Java 语言的代码规范。

Code Style

代码规范也是因人而异的,或者说因公司而异。之前,我工作的公司,有领导专门使用 word 文档编写一份代码规范,然后同事们仔细阅读,谨记于心,在 Coding 时多加注意。事实上,可以利用 IDE 将代码规范文件配置其中。这样,可以减少大部分凭借记忆解决的难题,实现自动化规范。

关于代码规范文件,一些知名互联网公司也公开有各自的代码规范,这些都是我们可以直接借鉴、拿来使用的优秀资源,当然你也可以再根据自己的情况作出修改。比较出名的有:

  • Google Style Guides

  • Square Java Style

这里我们拿 Google 公司提供的 Java 语言代码规范为例,简单描述一下如何使用 Android Studio 配置 Code Style。

首先下载 intellij IDE 对应的配置文件到本地电脑上:

intellij-java-google-style.xml

该文件内容都是一些 xml 配置,这里不妨截取一部分看看:

<?xml version="1.0" encoding="UTF-8"?>
<code_scheme name="GoogleStyle">
<option name="OTHER_INDENT_OPTIONS">
<value>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</value>
</option>

......

</code_scheme>

打开 Android Studio,在 Preferences 界面中找到  Code Style 菜单,选择 Java 语言,点击 Manage  按钮,Import 前面下载好的 xml 配置文件。然后在 Scheme 下拉列表中便可以看到 GoogleStyle 选项,切换即可:

之后,在 Coding 过程中,使用一些快捷键操作,比如格式化、TAB 键等,就会自动按照这份代码规范执行。当然,你也可以修改这份代码规范,前提是你要知道该规范的内容意义。关于这个,Google 也提供有一份在线文档,可供参考:

Google Java Style Guide

代码格式化

有了代码规范,便可以直接使用快捷键格式化当前文件的代码,Mac 上默认快捷键为:

Option + Command + L

你也可以直接选择整个项目或某个目录,右键点击 Reformat Code 选项,批量格式化。

当然,还可以下载 Google 提供的格式化 Jar 包,使用命令行工具对指定文件进行格式化操作。GitHub 地址为:

google-java-format

举个例子,批量格式化当前目录下的所有 Java 文件(实际使用时注意修改 jar 文件目录):

find . -name "*.java" -exec java -jar ~/tools/google-java-format-1.3-all-deps.jar -r {} \;

Check Style

有了代码规范和格式化操作,虽然一定程度上能够借助 IDE 规范化我们的代码,但是有些部分还是不能完全约束开发人员。比如,变量命名,你还是可以随意命名;每行代码字符个数你也可以随意书写。这些主观人为的操作,遵守不遵守规范,还是在于你个人。

那么,有没有一种办法检查你写完的代码是否符合某些规范要求呢?答案是肯定的。CheckStyle,自动帮你检查代码是否符合规范的一种插件化工具。

CheckStyle 工具可以帮助你检查 Javadoc 注视文档是否符合规范(比如首行必须以英文句号结束),变量、函数等命名是否符合给定正则表达式,括号、大括号前后留白是否符合规范,等等,这些规范要求都是可以在 xml 文件中自由约定设置的。

CheckStyle 的 GitHub 下载地址为:

https://github.com/checkstyle/checkstyle

也可以使用 Android Studio 在线安装的方式搜索安装:

CheckStyle 的使用需要配合着 xml 检查文件。Google 公司也提供有一份对应 Java 代码规范的检查规则文件和文档说明,检查文件的下载地址请点击:

google_checks.xml

同样的,你也可以按照自己的需要随意修改。不过最好和你前面使用的 Code Style 文件保持一致。

然后你就可以将这份检查规则文件配置给 CheckStyle 工具,也是在Preferences 窗口中配置( IDE 中默认也有一套 CheckStyle 规则):

重启 IDE,然后便可以在底部菜单栏中看到 CheckStyle 操作选项:

打开 CheckStyle 窗口,选择前面配置的 google-checkstyle 检查规则文件,点击左边的 Run 按钮,便可以对当前打开的 Java 文件检查规范:

可以看到,不符合规范的地方都有对应行数等提示信息,可以选择并逐一修改。修改完毕,再次执行 Run 操作检查时,如果完全符合 CheckStyle 的话,看到的就是 no problems 提示:

CheckStyle 插件工具的好处是,你能够直接在 IDE 中对项目中的某个 Java 文件检查规范,并且从错误信息处直接定位到相关代码位置,从而很方便地作出修改。还有一个好处是,你可以在编写代码时,实时得到 CheckStyle 的检测提示,如:

可以看到,在编辑区直接提示,方法中的左大括号前面需要使用空格与其他内容隔开。这样,我们在 Coding 的时候就能随时知道当前代码是否符合规范,非常方便。

而 CheckStyle 插件工具不好的地方在于,其不能做到对多个文件批量检查。比如,我想知道某个项目或者某个目录下的 Java 文件是否符合规范,插件就做不到。这个时候,你就可以使用命令行工具了。

下载 CheckStyle 提供的 Jar 包及 xml 规则文件,然后打开命令行工具,输入检查命令即可。如:

java -jar ~/tools/checkstyle-7.8.2-all.jar -c ~/tools/google_checks.xml MainActivity.java

命令行工具的弊端在于没有定位源码的功能,你只能看到当前文件哪里是否符合规范。有关 CheckStyle 的更多使用详情,请参考 在线文档。

事实上,CheckStyle 工具非常适合团队协作开发。比如,管理员可以将 CheckStyle 部署在 SVN 或者 Git 的远程仓库所在的服务器上。如果发现 push 或者 merge 的代码不符合这个规范要求,将拒绝接受。这样,便可以强制团队中的每一个开发人员严格按照规范修改自己的代码,使得整个项目或整个公司的项目代码保持统一的风格。

开源规范

除了前面我们说到的 Google 公司提供的 Check 检查规则文件,还有一些其他知名公司开源的内容可供选择:

  • HuaWei CheckStyle

  • Square CheckStyle

其他工具

静态代码分析工具当然不止 CheckStyle 这一个,提高代码质量你还可以使用这些工具:

  • Android Lint

  • FindBugs

  • PMD

诸如此类,选择一款适合你自己的就好。工具只是一种手段,提高团队协作效率、保证代码质量才是我们的终极目的。

参考链接

关于代码规范和相关工具的使用,你还可以阅读这些文章:

  • How to improve quality and syntax of your Android code

  • 代码规范和Android项目中的一些可用工具