深圳幻海软件技术有限公司 欢迎您!

超爱的IDEA提效神器Save Actions,卸载了

2023-02-27

前言你好,我是方同学(YourBatman)一切工具,都是为了提效。效率的提升一般来讲并不改变事务的本质,但足够高的效率也能引起质变,这和程序员熟悉的量变引起质变道理一样。IDEA作为Javaer的必备神器,几乎每个开发者都在使用。作为(公司内)IDEA的布道者,笔者分享的每篇IDEA相关文章都能受

前言

你好,我是方同学(YourBatman)

一切工具,都是为了提效。效率的提升一般来讲并不改变事务的本质,但足够高的效率也能引起质变,这和程序员熟悉的量变引起质变道理一样。

IDEA作为Javaer的必备神器,几乎每个开发者都在使用。作为(公司内)IDEA的布道者,笔者分享的每篇IDEA相关文章都能受到喜爱,比如最近的两篇:

  • 【方同学】是如何高效的使用IntelliJ IDEA
  • 【方同学】利用IDEA代码审查能力,来保证代码质量

工具好,也要用得巧。虽说每个Javaer都在用着同一个工具(IDEA),但对工具的使用效率上往往差异较大,可以翻看👆🏻的文章,看看自己是否在低效率的使用它!

本文给你安利一个提效神器:Save Actions,再向你解释下笔者为什么要卸载它!

所属专栏

  • BATutopia-IntelliJ IDEA

相关下载

  • 【女娲Knife-Initializr工程】访问地址:http://152.136.106.14:8761
  • Java开发软件包(Mac):https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit
  • 程序员专用网盘上线啦,开放注册送1G超小容量,帮你实践做减法:https://wangpan.yourbatman.cn

版本约定

  • IntelliJ IDEA 2021.2

正文

代码风格一致性

开发过程中,当遇到痛点时总希望去寻找相应的工具解决。

在开发项目时,一般都是多人维护一个项目。代码写下去只需要1次,但会被人看几十上百次,所以保持一致的代码规范、代码展示变得非常重要。但是,当团队内多人开发一个项目时,由于每个人的编码习惯、思维习惯、水平、觉悟都高低不一具有多样性,那么如何保证“所有人”的代码风格一致呢?

这个时候就得使用规则了。

相信很多团队各自都有自己的代码规范模板,模板一般是取最大公约数定出来的,比较容易达成一致。毕竟漂亮的东西趋同,只会丑得千奇百怪。定好代码的规范模板后,组员如何能高效的实施呢?这个时候一般要求提交代码之前必须(按照规范模板)格式化处理,进而达到抹平差异,去除掉个人风格,达到统一的目的。

问题又来了:IntelliJ IDEA是自动保存的,因此很多时候你修改了代码之后就出现:代码没有格式化、出现无用的import、无用的变量等一些列“不规范”的问题就保存了/提交了,怎么破?

针对这类痛点,作为开发神器的IDEA怎能想不到。因此它也针对性的提供了相应方案。

代码审查

嗯,方式方法都在这里:【方同学】利用IDEA代码审查能力,来保证代码质量

优点:全局扫,大而全

缺点:项目太大时候可能慢。另外,毕竟还是手动的,忘记了就没辙了

commit前执行Action

在IDEA的commit窗口栏里,点击如图红色框框里的设置按钮:

每个选项都代表什么功能,单词你都认识,所以不用多余解释了。

优点:在提交前集中式卡点,可做到没有漏网之鱼

缺点:阶段过于靠后。若需要修改,留给RD修改的时间太少了。所以经常会出现妥协式提交

PS:如果你平时提交代码用黑窗口、Smart Git而非IDEA,那就享受不到此“福利”喽

就我个人习惯而言,我不喜欢使用commit这种方式,工作中也很少使用。我认为应该将此动作提前:编辑每个文件保存时就及时触发相应动作,并且是自动的(无需人为干预)。

所以,接下来就引入本文主角:Save Actions。

Save Actions是什么?

直译:保存动作(们)。翻译为保存时触发的动作更为合适~

它其实也就是IDEA的一个插件而已:

简介为:支持可配置的、类似Eclipse的保存操作,包括“优化导入”、“重新格式化代码”、“重新排列代码”、“编译文件”和一些Java快速修复程序,如“添加/删除“this”限定符”,等等。当文件在磁盘上同步(或保存)时,插件将执行配置的操作。

惊不惊喜?这不正是我们需要的功能吗?是的,有了它,再也不用担心团队成员提交没有“处理”过的代码了。

我的常用配置如下截图:

如果你乐意,还可以勾选多个Java检查快速修复功能点(Java Inspection and Quick Fix),我一般不勾。

为何卸载Save Actions?

既然Save Actions这么好用,笔者为何要卸载它呢?一切都要从IDEA的迭代发展说起~

并不是笔者不重视这块了,而是有更好的方式取而代之。笔者从2017年底开始使用IDEA到现在,见证了它的迭代,最近几个版本都有写新特性的文章哦:

  • IntelliJ IDEA 2020.3正式发布,年度最后一个版本很讲武德
  • IntelliJ IDEA 2020.2正式发布,诸多亮点总有几款能助你提效
  • IntelliJ IDEA 2020.1发布,你要的都在这!
  • IntelliJ IDEA 2019.3发布,有哪些新特性?

随着IDEA的发展,硬核功能点越来越完善。举个例子:lombok自2015年起逐渐流行开来,因此在IDEA上安装lombok插件也就成了必备动作。既然如此,IDEA在其2020.3便将lombok插件设为内置,开发者无需再手动安装:

同理,IDEA眼瞅着使用者对自动代码格式化/自动代码检查的需求这么高,索性就将此功能也内置了。值得注意的是:从2021.2版本起才内置哦。

此功能并非以插件形式内置,位置在这:Preferences/Settings | Tools | Actions on Save

以上(勾选的)动作在保存时会自动触发。有了它,我似乎没有理由再留着Save Actions插件,这便是笔者卸载它的根因。

下面对最常用的3个功能进行简述:

Reformat code

格式化代码,推荐勾选☑️ 。

格式化代码范围:

Whole file:整个文件。这是默认选项

Changed lines:只格式化修改的行(们)。保守点的话,你可以使用此选项

Configure scope:配置范围。支持书写glop patter语法来自定义需要格式化的代码范围;支持通过@formatter:off/on等方式来控制某段代码不允许/允许格式化。这个自定义的功能怎么说呢,绝大多数情况下用不着这么去自定义,毕竟大大提高了复杂度。

格式化MyBatis的xml文件里的SQL时有时会出问题,这时可以通过加上@formatter:off/on注解来禁止格式化(需要先开启此功能)

Optimize import

重新排列import导包。作用:

将import按照顺序重新排列(比如static静态导入会放到最后)

删除掉无用的import

推荐勾选☑️ 。

Rearrange code

重新排列代码,推荐勾选☑️ 。

关于这个功能可能有的同学不太了解,拿Java举个栗子吧。

源代码:

/** 
 * 在此处添加备注信息 
 * 
 * @author YourBatman. <a href=mailto:yourbatman@aliyun.com>Send email to me</a> 
 * @site https://yourbatman.cn 
 * @date 2021/8/20 15:06 
 * @since 0.0.1 
 */ 
public class Demo { 
 
    private String name
 
    public int fun1(){return 0;} 
 
    private void fun0(){} 
    private static void funStatic0(){} 
 
    private int age; 
 
    public static void funStatic(){} 
 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

代码保存(触发Optimize import动作)后:

/** 
 * 在此处添加备注信息 
 * 
 * @author YourBatman. <a href=mailto:yourbatman@aliyun.com>Send email to me</a> 
 * @site https://yourbatman.cn 
 * @date 2021/8/20 15:06 
 * @since 0.0.1 
 */ 
public class Demo { 
 
    private String name
    private int age; 
 
    private static void funStatic0() { 
    } 
 
    public static void funStatic() { 
    } 
 
    public int fun1() { 
        return 0; 
    } 
 
    private void fun0() { 
    } 
 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

这就是重新排列的含义。自上而下排序规则:属性 -> 静态方法 -> 实例方法。

开发工具保持使用最新版

在编程界,坐在第二排看戏被公认不失为一种很好的升级策略:既保证不会过于陈旧享受不到新技术红利,又在稳定性上有所保证。比如:

  • JDK版本不要当小白鼠追新
  • Spring Boot、中间件版本不要一味追求最新版
  • ...

根据我的从业经验,对此观点有所改变,分享出来供你参考:

和数据打交道的基础设施层面(如JDK、Spring Boot、MQ、Redis...),尽量保守点,毕竟稳定压倒一切

开发工具类(如IDEA、DataGrid、Navicat...)推荐保持最新版,享受新功能特性带来开发效率上的提升,原因有三

1、享受新红利:可能是性能上提升、也可能是新功能来辅助你提升开发效率。毕竟对于软件来讲,新不如旧的可能性极低极低

2、keep update能让你对升级不再恐惧。毕竟若从2017年版本一步升级跨入2021年版本,对兼容性方面心里都会打鼓

3、开发工具即使出现(重大)bug,对数据不会造成任何影响,况且这个概率极低极低

即使是开发工具升级切勿盲目。至少你得看看升级的feature,是否存在阻断式更新等等...当然,据我了解,以IDEA为例,同学们不升级到最新版的最大阻碍是:无法破解。这个笔者就不多说什么了(毕竟正版IDEA确实比较贵...),是否购买正版自行选择喽~

总结

本文旨在输出一个观点:一切工具旨在提效,工具好也要用得巧。正所谓同样一把菜刀,握在米其林餐厅厨师手中和握在街边小炒厨师手中的功效的完全不一样的。