写代码一定会出错,让Error Prone来帮你

2023-03-06 14:48:31 浏览数 (1)

人都会犯错,对于任何事,任何水平层次的人来说,这个道理都是一致的。

无论你是初出茅庐的新手程序员,或是已经久经沙场的架构师,你写的代码一定是会出错的,并且可能经常会出现一些低级错误.

这就是为什么会有非常多的方法论与技术来帮助我们程序员,识别各种错误以及提升代码的质量。

比如列举一些常见的方式:

  • • 借助专业的编程IDE(比如JetBrain等)来写代码,专业的IDE不仅会有各种代码提示,更重要的是实时提示编译式的错误
  • • 通过TDD测试来随时保证与检查代码是否符合预期
  • • 通过结对编程或代码审查等方式来改善单个程序员思维的局限性
  • • 通过SonarQuebe或CheckStyle等自动化工具对代码的风格,质量进行检查等

而我始终认为,一个程序员是否优秀的一个最重要的点是否有意愿的使用各种方式保证与提升代码的质量

今天要聊的Error Prone就是这么一个辅助工具,它是能帮助我们程序员提升代码质量的有效工具之一.

什么是Error Prone

Error Prone是Google开源出来的一个工具, Error Prone在Google中有广泛及成熟的使用经验.

ErrorProne的官网的第一句话就是:

It’s common for even the best programmers to make simple mistakes. 意思是就算是最优秀的程序员的代码,也会经常性的出现简单的错误.

虽然类似IDE工具能做静态编译代码检查,比如不正当的类型赋值等,但显然一些逻辑上的错误,IDE是检查不出来的.

举例如下:

代码语言:javascript复制
public class ShortSet {
  public static void main (String[] args) {
    Set<Short> s = new HashSet<>();
    for (short i = 0; i < 100; i  ) {
      s.add(i);
      s.remove(i - 1);
    }
    System.out.println(s.size());
  }
}

这是ErrorProne官方列举的示例.

上面这个代码看起来似乎并无错误,但实际上 s.remove(i - 1) 没有任何效果,因为i-1的结果是Integer类型,而s是short类型集合,意味着这个方法实际上并不会移除任何集合中的对象.

这种错误难以发现,一般需要通过单元测试或其它测试才会发现错误.

为了能够尽快发现类似的错误,Google内部就整了ErrorProne这么一个框架.

Error Prone的原意是错误不可避免,所以Error Prone就是帮你迟早发现那些不易发现的错误

Error Prone能做什么

Error Prone能够帮助你做到:

  • • 将检查错误的过程嵌入到编译build代码的过程中,这样不需要你显式的执行它,每次build都能看到错误报告,支持主流的Maven以及Gradle甚至其它Java构建工具
  • • 对于每个错误,会给出解释,建议修改方式

以上面那个错误为例:

代码语言:javascript复制
ShortSet.java:6: error: [CollectionIncompatibleType] Argument 'i - 1' should not be passed to this method;
its type int is not compatible with its collection's type argument Short
      s.remove(i - 1);
              ^
    (see http://errorprone.info/bugpattern/CollectionIncompatibleType)
1 error

它会发现并提示你, its type int is not compatible with its collection's type argument Short,也就是告诉你不能在一个Short集合中使用int类型

如何使用Error Prone

对于Java来说,现在构建项目的主流方式应该主要是Maven以及Gradle这两个工具.其中我个人偏好Gradle,因为它更灵活并且支持Kotlin DSL,但在国内使用Maven的应该更多.

Error Prone对Maven与Gradle都是支持的.

只需要在Maven或Gradle配置下插件就OK了. 这些访问Error Prone的官网就能查阅到最新的配置方式了.

希望它能帮到你以及你的团队,提高你们的代码质量.

0 人点赞