IDEA 插件推荐 —— 让你写出好代码的神器!

概述
今天介绍的插件主要是围绕编码规范的。有追求的程序员,往往都有代码洁癖,要尽量减少代码的「坏味道」。
代码静态检查是有很多种类,例如圈复杂度、重复率等。业界提供了很多静态检查的插件来识别这些不合规的代码,帮助提高项目的质量。比较知名的一个产品是 SonarQube,它提供了一个「门禁」平台,集成了很多静态检查检查。下次有机会介绍一下该平台的搭建。
本文主要介绍 IDEA 中对于 Java 语言静态检查的好插件:
- Alibaba Java Coding Guidelines 阿里基于他们 Java 规范提供的插件
- CheckStyle-IDEA 检查代码的格式是否符合规范
- FindBugs-IDEA 检查代码是否有常见的一些 Bug
Alibaba Java Coding Guidelines
阿里巴巴 Java 编码指南插件支持。
首先说说阿里的 p3c 项目,它的 Github 主页地址是:https://github.com/alibaba/p3c 阿里之前开源过一份 Java 开发手册。手册从编程规约、异常日志、单元测试、MySQL 数据库、工程结构、设计规约等角度,介绍了阿里的 Java 开发规范,这个对于 Java 新手帮助挺大的,能够学到不少东西。有一些坑可能老司机也会翻车。

开发人员 Coding 时,可能就忘记规范了,写出来的代码还是会有『坏味道』。这时候Alibaba Java Coding Guidelines 插件就派上用场了。它会根据上面的 Java 开发规范对你的代码进行检查,不符合规范的代码会有提示,并给出修改建议。阿里作为国内 Java 大厂,基于成千上万的工程师总结出来的踩坑经验,我相信给出的规范建议还是比较可靠的。
上个栗子:
String str = "hello";
for (int i = 0; i < 100; i++) {
str = str + "world!";
}
先不要往下看,试着分析一下这段代码哪里可以优化?

其实,插键扫描的结果不仅有这个问题,还有『魔法数字』的问题。插件的用法,见下面的截图。

除此以外,建议在 IDEA 进行代码提交时,勾选上它提供的检查项按钮,这样如果有不合规的代码进行提交,就会提醒你修改:

CheckStyle-IDEA

项目主页:https://github.com/jshiell/checkstyle-idea
安装好之后,进入设置,勾选上你要选用的默认检查规范:

大厂往往都有自己的语言规范,可以导入选用:

右键菜单,选择 Check Current File 即可检查当前文件是否符合编码规范:

检查结果:

如果不符合规范的写法有点多,整改起来就会很痛苦了,这时候该怎么办?有一个功能叫格式化代码(Reformat Code),快捷键是:
- Mac:
Command+Option+L - Win:
Ctrl+Shift+L
如果想按照你指定的规则进行格式化,可以按照如下方式进行自定义:

FindBugs-IDEA
FindBugs 是一款老牌 Java 静态检查插件了。它的功能和阿里 p3c 那个插件很像,只不过它历史悠久、国际化一点。它同样的可以扫描代码,发现一些可能会引入 Bug 的代码段,给出参考建议。
启动 FindBugs 的方式,右键菜单中,Findbugs 提供了好几个选项:

Analyze Current File:检查当前文件Analyze Class uner Cursor:检查光标处的类Analyze Package Files:检查包文件Analyze Modul Files:检查 Module 文件Analyze Project Files:检查项目文件Analyze Scope Files:检查指定范围内的文件Analyze All Modified Files:检查所有修改过的文件Analyze changelist files:检查变更列表中的文件
检查结果:

检查结果分为如下类别:
Bad practice:不好的做法,代码违反了公认的最佳实践标准;Malicious code vulnerbility:恶意的代码漏洞;Correctness:可能不正确,比如错误的强制类型转换;Performance:潜在的性能问题;Security:安全性;Dodgy code:糟糕的代码,FindBugs团队认为该类型下的问题代码导 Bug 的可能性很高;Experimental:实验;Multithreaded correctness:关注于同步和多线程问题;Internationalization:国际化
扫描出来的结果怎么看懂,官网有专门的一页介绍 FindBugs Bug Description http://findbugs.sourceforge.net/bugDescriptions.html

除了上面右键菜单启动检查之外,还可以在相应文件夹右键菜单中启动:

针对检查的严格程度,其实是可以调节的,建议修改为 low,这样会尽可能的扫描出有潜在 Bug 的代码片段:

总结
以上是目前工作中经常用到的静态代码检查插键,虽然不是用了它们就真的能写出好代码,但是这些工具的确能够让你能够在前人的肩膀上少踩一些坑。比如阿里的那个检查插键,你可以按照它的提示,对照着他们的 Java 开发手册查看,分析一下,为何他们会有如此的规约。高楼大厦不都是一砖一瓦砌成的嘛?小知识点的基础打扎实了,才能走得更高!

由于国内网络问题,我提前将最新版的《阿里巴巴 Java 开发手册(泰山版).pdf》上传至云盘了,有需要的小伙伴公众号后台回复
泰山版即可获得下载链接。
一言
上周的写的一篇文章分享到微信群里,群友有人指出来标题有错别字,真是有点尴尬!其实,我写文章也比较随意,也是最近才开始坚持每周至少输出一篇分享的。但想想既然写了,就要尽量保证质量。引以为戒,以后要认真点才行!
目前分享的内容主要是开发环境、效率工具等。自己一直对这方面的文章比较感兴趣,因此之前就有相关积累。今后希望能通过阅读带来一些读书总结的分享,也希望关注的同学后台多留言,给出你的建议,感谢~
生命不息,折腾不止!关注 「Coder魔法院」,祝你 Niubilitiy !
参考
- 代码缺陷扫描神器——FindBugs:https://juejin.im/entry/591ad01ba22b9d005833903e
IDEA 插件推荐 —— 让你写出好代码的神器!的更多相关文章
- 写出优美代码的两个方式:一步到位VS迭代优化
最近把手头这个安卓APP的所有事务性方法都写完了,有了以下体会,新手体会,老鸟轻拍 想写成优美代码的人一般都会有这样的想法: 一定要在写每一句代码,写每一个方法,构造每一个类的时候,都要记得优化: ...
- NASA关于如何写出安全代码的10条军规
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:NASA关于如何写出安全代码的10条军规.
- 推荐4款个人珍藏的IDEA插件!帮你写出不那么差的代码
@ 目录 Codota:代码智能提示 代码智能补全 代码智能搜索 Alibaba Java Code Guidelines:阿里巴巴 Java 代码规范 手动配置检测规则 使用效果 CheckStyl ...
- 你还用拼音为变量命名?新人OIer别傻了,教你写出优质代码
本篇文章适用语言:python,c++,Java.(其实我就是随便bb) 我们在编辑代码的时候,不免拿其他人的代码进行学习,或者将自己的代码拿给别人修改.这个时候,如何让别人快速读懂你的代码,是提升效 ...
- 理解SQL原理,写出高效代码
做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,数据量大,人员流动大,那么我们还能保证下一段时间系统还能流畅的运行吗?我们还能保证下 ...
- 编写Java程序_输入三个整数x,y,z,请把这三个数由小到大输出,请写出实现代码。(3种方法)
要求说明: 输入三个整数x,y,z,请把这三个数由小到大输出. 实现代码: 第1种方法: import java.util.Scanner; public class xyzMaxMin{ publi ...
- VSCode 开发插件 推荐
VSCode 必装的 10 个高效开发插件 本文介绍了目前前端开发最受欢迎的开发工具 VSCode 必装的 10 个开发插件,用于大大提高软件开发的效率. VSCode 的基本使用可以参考我的原创视 ...
- setTimeout和setInterval的区别以及如何写出效率高的倒计时
1.setTimeout和setInterval都属于js中的定时器,可以规定延迟时间再执行某个操作,不同的是setTimeout在规定时间后执行完某个操作就停止了,而setInterval则可以一直 ...
- 如何用java写出无副作用的代码
搞java的同学们可能对无副作用这个概念比较陌生,这是函数式编程中的一个概念,无副作用的意思就是: 一个函数(java里是方法)的多次调用中,只要输入参数的值相同,输出结果的值也必然相同,并且在这个函 ...
随机推荐
- Spring Framework 之AOP
Spring Framework 之AOP 目录 Spring Framework 之AOP 问题 AOP概述 AOP知识 1.连接点(Joinpoint) 2.切点(PointCut) 3.增强(A ...
- andorid jar/库源码解析之okio
目录:andorid jar/库源码解析 Okio: 作用: 说白了,就是一个IO库,基于java原生io.来进行操作,内部做了优化,简洁,高效.所以受到了一部分人的喜欢和使用 栗子: 读写文件. p ...
- socket编程之并发回射服务器3
在socket编程之并发回射服务器一文中,服务器采用多进程的方式实现并发,本文采用多线程的方式实现并发. 多线程相关API: // Compile and link with -pthread int ...
- python-圆周率的计算【random库的应用】
圆周率的计算 ...
- 软件——IDEA 超实用使用技巧分享
前言 工欲善其事 必先利其器 最近受部门的邀请,给入职新人统一培训IDEA,发现有很多新人虽然日常开发使用的是IDEA,但是还是很多好用的技巧没有用到,只是用到一些基本的功能,蛮浪费IDEA这个优秀 ...
- 第三章:Python高级编程-深入类和对象
第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...
- Python+Typora博客图片上传
简介 用Typora 写Markdown 1年多了,这个编辑器的确很好用,但就是写完博客复制到博客园时要一个个手动插替换图片非常麻烦.后来发现最新版的Typora 已经支持图片上传功能,在 设置-图像 ...
- 利用vue-cli + vant搭建一个移动端开发模板
本文系原创,转载请附带作者信息.项目地址: https://github.com/momozjm/vant-project.git 前言 在项目开发过程中,一个新的项目需要我们从零开始搭建框架,这个时 ...
- linux解压缩tar.gz文件
1.解压缩命令 命令:tar -zxvf 文件名 -z 有gzip属性的 -x 解压 -v 显示所有过程 -f 要处理的文件名 2.压缩命令 命令: tar -zcxf 压缩后的文件名 要压缩的文件名 ...
- 自己动手写RPC
接下来2个月 给自己定个目标 年前 自己动手做个RPC 框架 暂时技术选型 是 dotcore + netty + zookeeper/Consul