从事编程这个行业,你一定被别人说过或者说过别人这句话:代码要规范!求职面试时也能从 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. go panic recover 异常处理

    Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常, ...

  2. lamp编译详解

    首先确认系统环境:centos6.4 min版本 1.安装需要的开发环境 yum groupinstall "Development Tools" "Server Pla ...

  3. NOIP树上问题总结

    这几年考了好几次树上问题: NOIP2012 疫情控制(二分答案+倍增+贪心) NOIP2013 货车运输(最大生成树+倍增) NOIP2014 联合权值(勉强算作树形dp的傻逼题) NOIP2015 ...

  4. JAVA基础补漏--SET

    HashSet: 1.无序集合. 2.底层是一个哈希表结构,查询速速很快. 哈希表==数据 + 链表/红黑树 特点:查询速度快. 存储数据到SET中: 1.计算数据的HASH值. 2.查看有没有相同H ...

  5. timestamp和date及datetime的区别

    DATE只保存日期,不保存时分秒 DATETIME类型用在你需要同时包含日期和时间信息的值时.MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1 ...

  6. linux ssh认证(公钥机)配置

    一.产生背景 在实际工作中,linux集群需要自动化的管理,市面上较常见的自动化运维工具诸如ansible,puppet,saltstack:轻量级的有pssh系列,这其中大多数工具使用的前提就是集群 ...

  7. SecureCRT在mac下无法输入中断命令

    mac下输入Ctrl +C无法中断程序,这个问题困扰了我好久,大概有很长一段时间我都是使用kill 进程的方式来代替中断: ps aux | grep python kill -9 pid 今天终于发 ...

  8. GTID主从 与 传统主从复制

    一.主从复制 1.)普通主从复制: 普通主从复制主要是基于二进制日志文件位置的复制,因此主必须启动二进制日志记录并建立唯一的服务器ID,复制组中的每个服务器都必须配置唯一的服务器ID.如果您省略ser ...

  9. java, double转String, 去掉0结尾的小数位

    小问题:double值的小数位是0时,转String会有“.0”结尾.比如,double值是“12”,转String得到的字符串是“12.0”.如果需要去掉0结尾的小数位,应当如何解决呢? 解决方案: ...

  10. sqlserver存储过程杀掉数据库中死锁

    Create proc p_lockinfo      @kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示      @show_spid_if_nolock ...