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

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

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

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

Code Style


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

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

这里我们拿 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 检查规则文件,还有一些其他知名公司开源的内容可供选择:

其他工具


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

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

参考链接


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

关于我:亦枫,博客地址:http://yifeng.studio/,新浪微博:IT亦枫

微信扫描二维码,欢迎关注我的个人公众号:安卓笔记侠

不仅分享我的原创技术文章,还有程序员的职场遐想

Java 代码规范,你应该知道的一些工具和用法的更多相关文章

  1. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

  2. 【转】Java代码规范

    [转]Java代码规范 http://blog.csdn.net/huaishu/article/details/26725539

  3. Java代码规范

    Java代码规范 本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改.本文档中没有说明的地方,请参看SUN Java标准代码规范.如果两边有冲突,以SU ...

  4. Java代码规范、格式化和checkstyle检查配置文档

    http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...

  5. 阿里官方Java代码规范标准《阿里巴巴Java开发手册 终极版 v1.3.0》

    终极版 v1.3.0 2017年开春之际,阿里诚意献上重磅大礼:<阿里巴巴Java开发手册>,首次公开阿里官方Java代码规范标准.这套Java统一规范标准将有助于提高行业编码规范化水平, ...

  6. MyEclipse中阿里JAVA代码规范插件(P3C)的安装及使用

    JAVA代码规范插件(P3C)是阿里巴巴2017年10月14日在杭州云栖大会上首发的,使之前的阿里巴巴JAVA开发手册正式以插件形式公开走向业界.插件的相关信息及安装包都可以在GitHub(https ...

  7. JAVA代码规范笔记(上)

    本文为<code conventions-150003>(JAVA代码规范)笔记. 文件组织 1.超过2000行代码的源文件将会比较难以阅读,应该避免. 2.每个Java源文件都包含单一的 ...

  8. IDEA中阿里JAVA代码规范插件(P3C)的安装及使用

    JAVA代码规范插件(P3C)是阿里巴巴2017年10月14日在杭州云栖大会上首发的,使之前的阿里巴巴JAVA开发手册正式以插件形式公开走向业界.插件的相关信息及安装包都可以在GitHub(https ...

  9. 阿里官方Java代码规范标准

    阿里官方Java代码规范标准<阿里巴巴Java开发手册 终极版 v1.3.0>下载 https://www.cnblogs.com/han-1034683568/p/7680354.htm ...

  10. 阿里官方Java代码规范标准《阿里巴巴Java开发手册》下载

    https://bbs.aliyun.com/read/306592.html?page=e 2017年开春之际,诚意献上重磅大礼:阿里巴巴Java开发手册,首次公开阿里官方Java代码规范标准. 这 ...

随机推荐

  1. 20135320赵瀚青LINUX第三章读书笔记

    第三章 进程管理 3.1 进程 进程的定义: 是处于执行期的程序以及它所包含的资源的总称. 线程的定义: 是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度 ...

  2. linux消息队列应用编程

    消息队列:  消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法   每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值   消息队列也有管道一样的不足,就是每个消息的 ...

  3. git-修改远程的URL

    git remote set-url命令修改remote URL git remote set-url传递两个参数 remote name.例如,origin或者upstream new remote ...

  4. nfs报错 - No route to host

    nfs报错 - No route to host ______________________________ 因为防火墙阻止的原因. 解决方法:服务器rhel7系统下,打开firewall-conf ...

  5. CNN卷积减少参数个数的理解(分为全连接到CNN三个层级)

    参考连接 : https://blog.csdn.net/accumulate_zhang/article/details/77816566 1000*1000 的图像, 1000000个隐层神经元, ...

  6. pt-table-sync修复mysql主从不一致的数据

    pt-table-sync简介 顾名思义,它用来修复多个实例之间数据的不一致.它可以让主从的数据修复到最终一致,也可以使通过应用双写或多写的多个不相关的数据库实例修复到一致.同时它还内部集成了pt-t ...

  7. JVM 内存调优 与 实际案例

    堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...

  8. mac iterm2 打开Linux 服务器文件乱码

    我的mac 上用是iterm2终端, Shell 环境是zsh.ssh 到Linux 服务器上查看一些文件时,中文乱码. 这种情况一般是终端和服务器的字符集不匹配,MacOSX下默认的是utf8字符集 ...

  9. pyspider—爬取下载图片

    以第一ppt网站为例:http://www.1ppt.com/ from pyspider.libs.base_handler import * import urllib2,HTMLParser,r ...

  10. Extjs 分页多选的实现

    Extjs 版本 6.X 单页面的多选,没有任何问题. 直接使用 Grid的配置项进行绑定即可获取: xtype: 'grid', bind: { selection: '{checkedRecord ...