上次講述了比較基本的 IntelliJ 安裝完後一定要馬上學會的五個快捷鍵,還沒有看的夥伴一定要點過去查看,今天來跟各位講述比較進階的五個功能,雖然說是進階但是也不會太難,大家要盡量把這些快捷鍵背下來。
找出最近操作過的檔案(Recent files popup)
快捷鍵:
- MacOS : ⌘E
- WindowsOS : Ctrl + E
有一句話是這麼說的,最近使用過的東西,肯定是最常使用的。這個真理可以用在生活的方方面面,例如家電、手機裡的APP以及程式設計裡的Cache也是這樣運作的。而在開發專案的某個功能時,一定常常打開那幾個類別(class)、修改那幾個方法(method),異動那幾個檔案。所以這個快捷鍵可是開發專案中,絕對要會的一個功能,那就是列出最近打開過的檔案。
舉自己最近在實作客製化的 ConcurrentSkipList,CustomConcurrentSkipListMap 就是我最常修改的檔案,就算不小心把這個檔案關閉了,也可以透過此快捷鍵呼叫出來。這個快捷鍵跟到處搜尋(Search Everywhere) 都可以快速移動到檔案,差別是到處搜尋適合你明確知道要到哪一個檔案(或者是有點忘記該檔案的全名,透過到處搜尋的模糊比對移動到該檔案)而最近操作過的檔案則讓你快速回憶最近打開過什麼檔案。
下圖就是我使用⌘E顯示最近打開過的檔案,可以發現前兩個就是我最常開發的檔案,另外中段是我去操考原生Java Lib的 AbstractNavigableMap 與 Navigable 的寫法,這兩個檔案曾經是一起打開的,所以也會一起出現幫助我回憶。
若當下想要打開 CustomConcurrentSkipListMapTest 來撰寫 test case, 那就移動到CustomConcurrentSkipListMapTest 按下enter鍵,IDE就會打開這個檔案,非常方便。
找出變數(variable) 或方法(method)用在哪裡 ( Find Usages)
快捷鍵:
- MacOS : ⌥ F7
- WindowsOS : Alt + F7
功能研發一旦多起來後,很常會發生自己已經記不得這個方法(method)提供給哪個前後端使用,此時這個強大的快捷鍵就很重要了,這個快捷鍵可以找出此方法或是變數在哪些地方有呼叫到。
下圖我們可以針對 convertKeyToByteArray 這個方法按下 ⌥ F7,IDE左下方就會跳出這個專案中有哪個地方有使用到這個方法,如果想更進一步的知道使用這個方法的程式邏輯,還可以再點下去,就會跳出右下更仔細的程式碼區塊。
重構(refactor)時也很常會用到這個快捷鍵,把呼叫到這個方法或變數的地方都稍微看過一遍,在異動這個方法或變數的時候都會很有幫助。
讓IntelliJ工具幫你想解決的方法或是優化的方法
快捷鍵:
- MacOS : ⌥ ↵
- WindowsOS : Alt + Enter
有時候功能寫到一半IDE會有紅色的下引線提示目前的程式碼可能有問題可以立即修正。
下圖中 IDE 提醒開發人員使用 listColumnFamilies() 這個方法有問題。
此時可以將滑鼠移到紅色下引線處並且按下 ⌥↵,IDE就會根據程式的上下文提示你要怎麼修正,以這個例子來說,按下⌥↵後IDE提示我們要進行 exception的處理,所以知道 listColumnFamilies 這個方法會 throws Exception,但我們作為呼叫這個方法的呼叫者因此我們必須要處理被呼叫者拋出的exception,這裡可以選擇在往上拋 throws 或者是在我們這個方法利用 try-catch 把這個 exception處理掉。
我們選擇 Surround with try-catch後 IDE產生 try-catch程式碼片段把 listColumnFamilies包起來,如同下圖的紅圈1的地方出現了 try-catch區塊,引用了try-catch區塊後 IDE就不會針對 listColumnFamilies 這個方法報錯了。
以上是解決程式中有邏輯問題的地方,但是這個快捷鍵還有另外一個強項,不僅僅能夠找出程式碼上下文錯誤,還可以幫你優化程式碼。有時候程式設計師在開發的時候很常會依照邏輯的直覺寫出程式碼。以下是一段程式碼,專業的程式設計師一看就知道這是一個判斷傳入參數 number 是否大於 0的方法。
依照邏輯來說,若 number > 0 就 return true 不是的話就 return false。
順帶一提,若IDE認為程式不是錯誤而是可以優化,會以橘色的下引線來呈現,而不是紅色的下引線。
聰明的IDE可以優化這段程式碼,讓他看起來更加的直覺,我們將滑鼠移到有橘色下引線的 if 的地方,按下⌥↵ 選擇 Simplify if else
IDE立刻就優化上述的程式碼,直接 return number 是否大於0 ,是不是很棒呢!
這個例子在專業的程式開發人員可能非常直覺,這裡只是用一個最簡單的例子來說明,IntelliJ 的優化能力遠遠不只這樣喔。以後在開發的時候看到有橘色的下引線都可以試著讓IntelliJ來優化看看,你會有很大的收穫喔!
一次註解一行或是一整個區塊
快捷鍵:
- MacOS :
- ⌘ / => 一次註解一行
- ⌘⌥ / => 一次註解一個區塊
- WindowsOS :
- Ctrl + / => 一次註解一行
- Ctrl + Alt + / => 一次註解一個區塊
註解的用途有兩種。
第一,我們想要改寫程式,但是又不想要刪掉舊的可以運作的程式碼,那我們可以先用註解的方式,把舊的程式碼註解起來,然後寫新的程式碼,好處是畢竟舊的程式碼還是可以運作的,保留下來可以以防萬一。
第二,我們可以用來當做類別或是方法的提示,告訴其他程式設計師,這段程式碼是在做什麼的,畢竟註解就是不會執行的區塊,想要怎麼使用都是沒有問題的。
註解的方式有分 單行註解 跟 多行註解 的方式。單行註解是以 // 呈現, // 之後的所有的文字都會被編譯器當做註解;多行註解是以 /* */ 呈現,被包在裡面的程式碼會被編譯器當做註解
總結來說,當編譯器看到註解的時候,他就會選擇忽略不執行那行(單行註解)或是那段(多行註解)。
而 IDE中呼叫單行註解的方法,移動到要註解的那行後按下 ⌘ /
眼尖的夥伴會發現這行最前面被IDE加上了 //
要呼叫多行註解的方法,選取整段要註解的程式碼,按下 ⌘⌥ /
如果常在看原生函式庫的程式設計師,會發現好的程式,註解一定不可少。
下圖是原生 java.text.spi.SimpleDateFormat 類別的 format 方法,上面一串註解就是寫這個API的工程師所撰寫的註解,裡面很明確的告訴你怎麼使用這個方法,會拋出什麼例外,一清二楚。
把沒有對齊的程式碼快速對齊
快捷鍵:
- MacOS : ⌘⌥L
- WindowsOS : Ctrl + Alt + L
正確的縮排可以讓檢視程式碼的夥伴事倍功半,畢竟有的時候程式會有一連串的 if-else,if裡面也還會有 if-else ,所以若沒有正確的縮排,不僅程式碼閱讀起來會很難理解,有些程式語言的編譯器甚至還會報錯(像是 python),不過小編拿手的Java不會報錯,這就容易造成程式碼閱讀上的麻煩。
下面這段程式碼 第二個 else 就多縮排了一次,很容易會讓檢視者在閱讀程式碼時會下意識的忽略第二個if內的else,但是因為IDE可以編譯得過所以不會報錯
下圖這個才是正確的縮排,if 跟 else 切齊
由於檢視者不可能每次看程式的時候都特別去注意這個專案的人有沒有正確縮排,所以如果發現有縮排上的問題,就可以透過快速鍵 ⌘⌥ L 讓IDE幫忙調整這一整個檔案的縮排。
結論
這篇文章是關於IntelliJ 快捷鍵的第二篇文章,第一篇文章是初探IntelliJ,這篇之後的文章(包含這篇)會著重在於如何用在寫程式開發上面,每一個快捷鍵都是我在開發上面使用了幾百次幾千次,有感如果能熟記這些快捷鍵可以在開發的過程中事倍功半,且不容易打斷思緒去找該功能對應在哪個選單,有時候寫程式的靈感就在這一瞬間消失了,實在得不償失。