1. 程式人生 > >IntelliJ IDEA 的 20 個程式碼自動完成的特性

IntelliJ IDEA 的 20 個程式碼自動完成的特性

在這篇文章中,我想向您展示 IntelliJ IDEA 中最棒的 20 個程式碼自動完成的特性,可讓 Java 編碼變得更加高效。對任何整合開發環境來說,程式碼的自動完成都是最最重要的一項功能,它根據你輸入的內容進行預判並幫你自動完成你想輸入的程式碼,有時候甚至都不知道自己想要輸入什麼,例如一些類名、成員、方法或者是其他方面的內容。

IntelliJ IDEA 中的程式碼自動完成的功能之所以能讓我如此印象深刻,原因是 IDEA 真的理解你的程式碼以及你當前所在的上下文。接下來我們將這些最重要的特性進行簡單的說明,這些特性讓 IDEA 顯示出比其他 IDE 更棒的表現。

即刻完成 Instant completion

第一個也是最吸引我的就是“即刻完成”特性,不同於其他 IDE,IDEA 可在任意地方提供這個功能,而不只是當你要訪問某個類的成員時。只需要輸入單詞的首字母,IntelliJ IDEA 就會立即給出最相關的、最適合此處程式碼編輯需要的選項共你選擇。

想要了解“即刻完成”是多麼的有效,你可以瀏覽這個 演示視訊

型別感知的自動完成 Type-aware completion

另一個特性同樣打破了常規的程式碼自動完成的方法,稱為:智慧自動完成。你可能已經知道,IDEA 中包含不止一種自動完成的功能,包括 基本自動完成 ⌘Space 和 智慧自動完成 ⌘⇧Space.

當你撥出 智慧自動完成

 時,它會將建議列表中的不適用的條目過濾掉,只顯示可用的類、變數、屬性或者方法,這個提升了效能而且可以避免不必要的錯誤,如果你試用下這個功能,你肯定會時刻想到它。

靜態屬性和方法 Static fields and methods

就如同剛才我說的,IDEA 一直走在你的想法之前。如果你不記得一些靜態成員的類名,你只需要開始輸入靜態成員的名稱,然後呼叫兩次“自動完成”,IDEA 會給你提供正確的可供選擇的列表,甚至是通過靜態 import 進來的方法,如果你呼叫 Intention action ⌥⏎ 的話.

再一次說明,如果你使用 智慧自動完成, 它將只提供可正確使用的選項。

鏈式自動完成 Chain completion

接下來的一個可讓你更多的提升編碼效率的自動完成特性,名為 鏈式自動完成(Chain completion). 如果你需要輸入這樣的呼叫方法 getModule().getProject(),只需要使用兩次 Smart completion 即可。這種情況下 IDEA 將掃描變數、屬性和方法,以及在當前上下文中的可見性,併為你提供可用的選擇。

你可能知道 Eclipse Juno 有一個名為 Code Recommenders 的外掛,這是一個相當有意思的外掛提供了這裡說到的功能,但它的工作方式完全不同,只提供 Eclipse SDK API 類中的建議,而 IDEA 為你提供你程式碼中所有類的自動完成建議。

資料流分析 Data flow analysis

IntelliJ IDEA 被稱為是最智慧的 Java IDE 的原因是,IDEA 提供的各種功能都是基於對你程式碼分析的結果,資料流分析就是其中一項。IDEA 分析資料流以便猜測執行環境中的變數型別,並提供基於這個型別的自動完成以及自動增加類的強制型別轉換。

常量自動完成 Constants completion

很多 API 使用 Java 的原始型別而不是列舉型別來定義常量,IDEA 能分析出專案中的這些常量,並在自動完成的建議列表中提供選擇,快速輸入。

父類自動完成 Super completion

你可能已經注意到了,要呼叫一個有很多引數的父類建構函式挺煩人,而 IDEA 能理解你想要的並提供建議列表供選擇。

語句自動完成 Statements completion

IntelliJ IDEA 另外一個智慧的特性就是 自動完成語句 Complete statement ⌘⇧⏎, 可以幫你完成正在輸入的語句的剩餘部分,自動增加漏掉的大括號小括號和必要的格式化處理。

你可能認為這是一個很小的特性,但你會很驚奇的發現當你習慣後,它節省你很多時間。

想試試這個特性可在程式碼中嘗試輸入 if 然後按 ⌘⇧⏎. 你也可以在從建議列表中選擇的時候使用。

引數資訊 Parameter info

我相信大多數的 IDE 在你呼叫某個方法或者建構函式時都提供了引數的建議,然後如何提供的也是非常重要。

IntelliJ IDEA 會顯示每個過載方法或者建構函式的引數資訊,並高亮其中最佳匹配的引數型別。這幫你根據輸入和期望的內容來選擇合適的方法。

你也可以通過 ⌘P 來顯示引數資訊。

快速定義 Quick definition

另外一個你可能不知道的特性就是 快速定義 Quick definition ⌘⇧I. 它會彈窗顯示建議列表中的方法定義的內容,更多的時候,方法的定義比文件更有用,特別是你不確定要使用哪個方法時。

從自動完成中排除 Exclude from completion

我肯定每個人都至少會碰到一次這種情形,你從來不用的某個反覆總是反覆的出現在自動建議列表中。例如 com.sun 或者是 java.awt 包。

IntelliJ IDEA 可幫你排除掉這些選項,只需要在要排除的選項中呼叫 Intention ⌥⏎ 並確認,你也可以在Settings 中重新找回這些資訊。

其他語言注入 Injected languages

接下來的這個就不管是程式碼自動完成那麼簡單,這個功能完全可以開一篇新的文章詳細介紹,但這裡只介紹它跟程式碼自動完成有關的部分。

其他語言注入 Language injection 是 IntelliJ IDEA 帶來的高階程式碼助手,可對 Java 程式碼中字串的表示式進行自動完成。這些表示式可以是 SQL, JPQL, XPath expression, HTML, CSS, JavaScript 片段等任何語言。

在 IntelliJ IDEA 提供這些表示式的自動完成功能前,你必須指定對應的語言,你可在字串上呼叫 Intention action ⌥⏎ 來設定,然後方可使用。

例如你在 IDEA 中定義了一個數據源,你將可使用基於表名的 SQL 表示式的自動完成,該 IDE 會分析專案中所有的檔案並提供所支援語言的高階自動完成功能。

使用 Tab 鍵的自動完成 Completion with Tab

另外一個特性就是 Сompletion with Tab,也就是使用 Tab 鍵來實現自動完成,當你選擇建議列表中的某個條目後點擊 ⇥, 選中的內容將會覆蓋游標識別符號,而不是插入。這在編輯如檔名這樣的識別符號片段時是很有用的。

否定布林值結果 Negating boolean results

並不是所有人都知道,當你從建議列表中使用 ! 來選擇一個布林值的選項時,IntelliJ IDEA 會自動新增所選項的的非值(例如本來是true的變成false)。

中間匹配 Middle matching

另外一個高效的方法就是 中間匹配 Middle matching. 意思是當你在剛開始要輸入某個識別符號時,IntelliJ IDEA 就會為你提供可供選擇的建議列表,這個特效能顯著提升編碼效率,特別是當你只記住某個名稱的一部分時。

大小寫敏感設定 Case sensitivity settings

正如你可能已經知道的,程式碼完成常用的方法就是使用駝峰法則來根據您的輸入去匹配相應的類名。雖然你需要輸入至少一個大小字母來給 IDE 一些線索提示。而 IntelliJ IDEA 改進了這個法則,它不要求一定是大小字母,也可以是小寫的,也就是說你沒必要在每次使用這個功能時按 ⇧

預設 IntelliJ IDEA 對大小寫是敏感的,你可以在 Settings 修改此項設定。

資源屬性(properties)、檔名和資源的自動完成

IDEA 還可判斷當前正在使用一些載入資源的方法,並給出可供選擇的資源列表。

一些在非 Java 檔案中的類名自動完成 Class name completion in non-Java files

IntelliJ IDEA 同樣還提供一些非 Java 檔案,如 XML 配置檔案中的類名自動完成。

其他地方的自動完成 Completion in other places

另外一個你在別的 IDE 中很難見過的自動完成功能是,它不只是在程式碼編輯器中,還可用在偵錯程式、表示式模擬、監視、檔案選擇器、搜尋輸入等等諸多地方使用。

表示式評估和監視工具中的自動完成這個功能是非常有價值的。

總結

我希望這篇文章能幫你更好的理解 IntelliJ IDEA 的程式碼自動完成特性,並從中受益。

你可以通過 Help → Productivity Guide 來了解更多的自動完成的型別以及 IDEA 已經幫你節省了多少時間(這個有點意思)