超愛(ài)的IDEA提效神器Save Actions,卸載了
前言
你好,我是方同學(xué)(YourBatman)
一切工具,都是為了提效。效率的提升一般來(lái)講并不改變事務(wù)的本質(zhì),但足夠高的效率也能引起質(zhì)變,這和程序員熟悉的量變引起質(zhì)變道理一樣。
IDEA作為Javaer的必備神器,幾乎每個(gè)開發(fā)者都在使用。作為(公司內(nèi))IDEA的布道者,筆者分享的每篇IDEA相關(guān)文章都能受到喜愛(ài),比如最近的兩篇:
- 【方同學(xué)】是如何高效的使用IntelliJ IDEA
- 【方同學(xué)】利用IDEA代碼審查能力,來(lái)保證代碼質(zhì)量
工具好,也要用得巧。雖說(shuō)每個(gè)Javaer都在用著同一個(gè)工具(IDEA),但對(duì)工具的使用效率上往往差異較大,可以翻看👆🏻的文章,看看自己是否在低效率的使用它!
本文給你安利一個(gè)提效神器:Save Actions,再向你解釋下筆者為什么要卸載它!
所屬專欄
- BATutopia-IntelliJ IDEA
相關(guān)下載
- 【女媧Knife-Initializr工程】訪問(wèn)地址:http://152.136.106.14:8761
- Java開發(fā)軟件包(Mac):https://wangpan.yourbatman.cn/s/rEH0 提取碼:javakit
- 程序員專用網(wǎng)盤上線啦,開放注冊(cè)送1G超小容量,幫你實(shí)踐做減法:https://wangpan.yourbatman.cn
版本約定
- IntelliJ IDEA 2021.2
正文
代碼風(fēng)格一致性
開發(fā)過(guò)程中,當(dāng)遇到痛點(diǎn)時(shí)總希望去尋找相應(yīng)的工具解決。
在開發(fā)項(xiàng)目時(shí),一般都是多人維護(hù)一個(gè)項(xiàng)目。代碼寫下去只需要1次,但會(huì)被人看幾十上百次,所以保持一致的代碼規(guī)范、代碼展示變得非常重要。但是,當(dāng)團(tuán)隊(duì)內(nèi)多人開發(fā)一個(gè)項(xiàng)目時(shí),由于每個(gè)人的編碼習(xí)慣、思維習(xí)慣、水平、覺(jué)悟都高低不一具有多樣性,那么如何保證“所有人”的代碼風(fēng)格一致呢?
這個(gè)時(shí)候就得使用規(guī)則了。
相信很多團(tuán)隊(duì)各自都有自己的代碼規(guī)范模板,模板一般是取最大公約數(shù)定出來(lái)的,比較容易達(dá)成一致。畢竟漂亮的東西趨同,只會(huì)丑得千奇百怪。定好代碼的規(guī)范模板后,組員如何能高效的實(shí)施呢?這個(gè)時(shí)候一般要求提交代碼之前必須(按照規(guī)范模板)格式化處理,進(jìn)而達(dá)到抹平差異,去除掉個(gè)人風(fēng)格,達(dá)到統(tǒng)一的目的。
問(wèn)題又來(lái)了:IntelliJ IDEA是自動(dòng)保存的,因此很多時(shí)候你修改了代碼之后就出現(xiàn):代碼沒(méi)有格式化、出現(xiàn)無(wú)用的import、無(wú)用的變量等一些列“不規(guī)范”的問(wèn)題就保存了/提交了,怎么破?
針對(duì)這類痛點(diǎn),作為開發(fā)神器的IDEA怎能想不到。因此它也針對(duì)性的提供了相應(yīng)方案。
代碼審查
嗯,方式方法都在這里:【方同學(xué)】利用IDEA代碼審查能力,來(lái)保證代碼質(zhì)量
優(yōu)點(diǎn):全局掃,大而全
缺點(diǎn):項(xiàng)目太大時(shí)候可能慢。另外,畢竟還是手動(dòng)的,忘記了就沒(méi)轍了
commit前執(zhí)行Action
在IDEA的commit窗口欄里,點(diǎn)擊如圖紅色框框里的設(shè)置按鈕:
每個(gè)選項(xiàng)都代表什么功能,單詞你都認(rèn)識(shí),所以不用多余解釋了。
優(yōu)點(diǎn):在提交前集中式卡點(diǎn),可做到?jīng)]有漏網(wǎng)之魚
缺點(diǎn):階段過(guò)于靠后。若需要修改,留給RD修改的時(shí)間太少了。所以經(jīng)常會(huì)出現(xiàn)妥協(xié)式提交
PS:如果你平時(shí)提交代碼用黑窗口、Smart Git而非IDEA,那就享受不到此“福利”嘍
就我個(gè)人習(xí)慣而言,我不喜歡使用commit這種方式,工作中也很少使用。我認(rèn)為應(yīng)該將此動(dòng)作提前:編輯每個(gè)文件保存時(shí)就及時(shí)觸發(fā)相應(yīng)動(dòng)作,并且是自動(dòng)的(無(wú)需人為干預(yù))。
所以,接下來(lái)就引入本文主角:Save Actions。
Save Actions是什么?
直譯:保存動(dòng)作(們)。翻譯為保存時(shí)觸發(fā)的動(dòng)作更為合適~
它其實(shí)也就是IDEA的一個(gè)插件而已:
簡(jiǎn)介為:支持可配置的、類似Eclipse的保存操作,包括“優(yōu)化導(dǎo)入”、“重新格式化代碼”、“重新排列代碼”、“編譯文件”和一些Java快速修復(fù)程序,如“添加/刪除“this”限定符”,等等。當(dāng)文件在磁盤上同步(或保存)時(shí),插件將執(zhí)行配置的操作。
驚不驚喜?這不正是我們需要的功能嗎?是的,有了它,再也不用擔(dān)心團(tuán)隊(duì)成員提交沒(méi)有“處理”過(guò)的代碼了。
我的常用配置如下截圖:
如果你樂(lè)意,還可以勾選多個(gè)Java檢查快速修復(fù)功能點(diǎn)(Java Inspection and Quick Fix),我一般不勾。
為何卸載Save Actions?
既然Save Actions這么好用,筆者為何要卸載它呢?一切都要從IDEA的迭代發(fā)展說(shuō)起~
并不是筆者不重視這塊了,而是有更好的方式取而代之。筆者從2017年底開始使用IDEA到現(xiàn)在,見(jiàn)證了它的迭代,最近幾個(gè)版本都有寫新特性的文章哦:
- IntelliJ IDEA 2020.3正式發(fā)布,年度最后一個(gè)版本很講武德
- IntelliJ IDEA 2020.2正式發(fā)布,諸多亮點(diǎn)總有幾款能助你提效
- IntelliJ IDEA 2020.1發(fā)布,你要的都在這!
- IntelliJ IDEA 2019.3發(fā)布,有哪些新特性?
隨著IDEA的發(fā)展,硬核功能點(diǎn)越來(lái)越完善。舉個(gè)例子:lombok自2015年起逐漸流行開來(lái),因此在IDEA上安裝lombok插件也就成了必備動(dòng)作。既然如此,IDEA在其2020.3便將lombok插件設(shè)為內(nèi)置,開發(fā)者無(wú)需再手動(dòng)安裝:
同理,IDEA眼瞅著使用者對(duì)自動(dòng)代碼格式化/自動(dòng)代碼檢查的需求這么高,索性就將此功能也內(nèi)置了。值得注意的是:從2021.2版本起才內(nèi)置哦。
此功能并非以插件形式內(nèi)置,位置在這:Preferences/Settings | Tools | Actions on Save
以上(勾選的)動(dòng)作在保存時(shí)會(huì)自動(dòng)觸發(fā)。有了它,我似乎沒(méi)有理由再留著Save Actions插件,這便是筆者卸載它的根因。
下面對(duì)最常用的3個(gè)功能進(jìn)行簡(jiǎn)述:
Reformat code
格式化代碼,推薦勾選☑️ 。
格式化代碼范圍:
Whole file:整個(gè)文件。這是默認(rèn)選項(xiàng)
Changed lines:只格式化修改的行(們)。保守點(diǎn)的話,你可以使用此選項(xiàng)
Configure scope:配置范圍。支持書寫glop patter語(yǔ)法來(lái)自定義需要格式化的代碼范圍;支持通過(guò)@formatter:off/on等方式來(lái)控制某段代碼不允許/允許格式化。這個(gè)自定義的功能怎么說(shuō)呢,絕大多數(shù)情況下用不著這么去自定義,畢竟大大提高了復(fù)雜度。
格式化MyBatis的xml文件里的SQL時(shí)有時(shí)會(huì)出問(wèn)題,這時(shí)可以通過(guò)加上@formatter:off/on注解來(lái)禁止格式化(需要先開啟此功能)
Optimize import
重新排列import導(dǎo)包。作用:
將import按照順序重新排列(比如static靜態(tài)導(dǎo)入會(huì)放到最后)
刪除掉無(wú)用的import
推薦勾選☑️ 。
Rearrange code
重新排列代碼,推薦勾選☑️ 。
關(guān)于這個(gè)功能可能有的同學(xué)不太了解,拿Java舉個(gè)栗子吧。
源代碼:
- /**
- * 在此處添加備注信息
- *
- * @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(){}
- }
代碼保存(觸發(fā)Optimize import動(dòng)作)后:
- /**
- * 在此處添加備注信息
- *
- * @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() {
- }
- }
這就是重新排列的含義。自上而下排序規(guī)則:屬性 -> 靜態(tài)方法 -> 實(shí)例方法。
開發(fā)工具保持使用最新版
在編程界,坐在第二排看戲被公認(rèn)不失為一種很好的升級(jí)策略:既保證不會(huì)過(guò)于陳舊享受不到新技術(shù)紅利,又在穩(wěn)定性上有所保證。比如:
- JDK版本不要當(dāng)小白鼠追新
- Spring Boot、中間件版本不要一味追求最新版
- ...
根據(jù)我的從業(yè)經(jīng)驗(yàn),對(duì)此觀點(diǎn)有所改變,分享出來(lái)供你參考:
和數(shù)據(jù)打交道的基礎(chǔ)設(shè)施層面(如JDK、Spring Boot、MQ、Redis...),盡量保守點(diǎn),畢竟穩(wěn)定壓倒一切
開發(fā)工具類(如IDEA、DataGrid、Navicat...)推薦保持最新版,享受新功能特性帶來(lái)開發(fā)效率上的提升,原因有三
1、享受新紅利:可能是性能上提升、也可能是新功能來(lái)輔助你提升開發(fā)效率。畢竟對(duì)于軟件來(lái)講,新不如舊的可能性極低極低
2、keep update能讓你對(duì)升級(jí)不再恐懼。畢竟若從2017年版本一步升級(jí)跨入2021年版本,對(duì)兼容性方面心里都會(huì)打鼓
3、開發(fā)工具即使出現(xiàn)(重大)bug,對(duì)數(shù)據(jù)不會(huì)造成任何影響,況且這個(gè)概率極低極低
即使是開發(fā)工具升級(jí)切勿盲目。至少你得看看升級(jí)的feature,是否存在阻斷式更新等等...當(dāng)然,據(jù)我了解,以IDEA為例,同學(xué)們不升級(jí)到最新版的最大阻礙是:無(wú)法破解。這個(gè)筆者就不多說(shuō)什么了(畢竟正版IDEA確實(shí)比較貴...),是否購(gòu)買正版自行選擇嘍~
總結(jié)
本文旨在輸出一個(gè)觀點(diǎn):一切工具旨在提效,工具好也要用得巧。正所謂同樣一把菜刀,握在米其林餐廳廚師手中和握在街邊小炒廚師手中的功效的完全不一樣的。












































