合格的程序員都善於使用工具,正所謂君子性非異也,善假於物也。
使用自動化工具可以減少自己的工作量,提高工作效率。日常編程過程中,我們經常需要編寫重複的代碼片段,比如說
private static final Logger LOGGER = LoggerFactory.getLogger(HashServiceImpl.class);
每次編寫時都要鍵入很多鍵,有什麼方法可以快速生成這段代碼呢?類似的,如何保存格式固定的常用代碼片段,然後在需要時快速生成呢。IDEA 的 Live Template 是一個可行的途徑。
我也是最近才逐漸使用 IDEA 的 Live Template 功能,之前雖然知道這個功能,但是沒有養成使用的習慣。最近一段時間在不斷審視並反思自己的編程、工作和生活習慣,才發現其中有很多可以優化精進的地方。
這也是《程序員修煉之道》中所說的 Think ! About Your Work 。
IDEA 是一個很強大的編程工具,學會使用它能夠極大的提高工作效率,將精力投入到更關鍵的事情上,而不是將時間浪費在編寫重複代碼上面。
而作為 Java 程序員,令人苦惱的地方是 Java 開發過程中經常需要編寫有固定格式的代碼,例如說聲明一個私有變量,Logger 或者 Bean 等等。對於這種小範圍的代碼生成,我們可以利用 IDEA 提供的 Live Templates 功能。
Live Template 並不是簡單的 Code Snippet,它甚至支持 Groovy函數配置,可以編寫一些複雜的邏輯,支持很複雜的代碼生成。
基本使用
IDEA 自帶很多常用的動態模板,都是大家平常編碼時的常用語句格式。比如說下面四張動圖中的語句。
四張圖分別是 聲明靜態 String 類型成員變量,判斷字符串為空,for 循環和打印函數參數。
自定義 Template
打開配置頁面,進入 Live Template 選項卡,我們可以看到 IDEA 預先設置的模板配置。這些模板都是最常用的一些語句,我們先來看一下它們都是如何定義的。
縮寫就是 IDEA 識別的模板的別名,就像文章開頭展示的當你鍵入 soutm 時,IDEA 就會自動識別為該模板。
而應用上下文則表示該模板在什麼上下文中生效。比如說上文中時一個 System.out 的語句,它只應該在 Java 的函數體中有效,所以它的應用上下文設置為 Java:statement,在其他類型文件或者 Java 文件的成員變量聲明位置都無法使用該模板。
模板內容就是你按下 Tab 鍵之後,IDEA 自動生成的內容,它一般包含兩個部分,純文本和參數。參數可以進行值綁定,還支持光標的自動跳轉。如同上文所示, $CLASS_NAME$ 和 $METHOD_NAME$ 就是參數,而 $END$是一個特殊的參數,它表示光標最後一個跳轉的位置。
而參數設置就是設置這些參數的值,可以使用 IDEA 提供的一些內置函數,還可以使用強大的 Groovy 腳本。去 IDEA 的官網可以查看這些函數的具體作用。
我們這裡講解一下 groovyScript("groovy code",arg1) 的使用。它能提供一切你想要的能力,它支持執行 Groovy 腳本處理輸入,然後輸出處理後的字符串
groovyScript("code", ...)
| code | 一段Groovy代碼或者Groovy腳本代碼絕對路徑 |
| ... | 可選入參,這些參數會綁定到`_1, _2, _3, ..._n`, 在 Groovy 代碼中使用。|
比如之前打印函數參數的模板是這樣定義的。
groovyScript("'"' + _1.collect { it + ' = [" + ' + it + ' + "]'}.join(', ') + '"'", methodParameters())
methodParameters 是 IDEA 內置的函數,它返回的結果作為參數輸入到 Groovy 的腳本中,生成打印參數函數的字符串。
後記
感謝大家的閱讀,希望大家繼續關注,也可以留言分享你最喜歡使用的編程工具和編程小技巧。
個人微信公眾號 程序員歷小冰 編程小技巧之 IDEA 的 Live Template
個人博客: 「鏈接」