程式設計師的工作效率:Emacs vs IntelliJ IDEA

jobbole發表於2014-03-15

  我用 Emacs 寫了 7 年的 C++ 程式碼。 4 年前,當我換了工作,開始使用 IntelliJ IDEA 轉向 Java 開發。毫無疑問,比起 Emacs,我在 IntelliJ IDEA 上寫程式碼更有效率。

  導航

  程式碼好像真的是80%由導航生成,只有20%是實際寫作的結果,IntelliJ IDEA的真正亮點所在是導航到程式碼庫。例如,假設你要新增功能到現有的類,即使你對那個類很熟悉,你還是需要檢查新程式碼該放在哪裡比較合適,需要新增一個新的宣告嗎?還有什麼其他的類在使用你現在修改的方法?這些都需要檢視現有程式碼。

  甚至在你寫程式碼時也會有很多導航,你想要使用的那個方法的名稱是什麼?引數的序列是什麼-是先有一個string,然後一個
整型,或是其他方式?列舉可能的取值是什麼?

  有一些些導航存在於一個檔案中,而在一個檔案中我最常用的操作有:跳轉到檔案的頂部或底部,轉到一行的開始或結束,選擇文字,剪下,複製,貼上,向前向後搜尋,註釋以及取消註釋程式碼。 Emacs 和IntelliJ IDEA對這些操作都有很好的
命令和快捷鍵支援。

  但是,當涉及到檔案之間的導航時,IntelliJ IDEA就有很大的優勢。其中一個最有用的命令是Ctrl + B(轉到宣告),正如其名所暗示的,你可以轉到變數,方法,以及類的宣告處,即使它在另一個檔案中。Ctrl + Alt + 左鍵可以返回上一級,我時刻都在用它,經常會在跳幾級後回到開始的地方。

  另一個相關的導航命令是Ctrl + Alt + B(轉向定義)。在一個介面的方法名處使用此命令,你將會得到一個彈出的列表顯示著這個方法所有實現的地方,然後你可以選擇一個你需要轉向的,(如果只有一個實現,你就可以直接轉到哪兒)。過載方法是同樣的道理。

  與此相反的是Ctrl + U (轉向父類方法或父類)。如果插入符在一個介面函式的實現處(一個小小的介面符號在方法名的左側),這個命令將會帶你轉到介面本身。

  當我想檢視一個方法或變數被使用的所有地方時,我使用Ctrl + Alt + F7(顯示用法)。這個命令彈出一個包含所有使用處
的列表,你可以很容易地轉向任意一個。如果要查詢類,我使用Ctrl + N ( 轉到類),它可以讓你使用大寫字母和*萬用字元搜尋類名。我也經常用ctrl + E。他會彈出一個視窗包含了最近最常使用的15個檔案(最常使用的在最上面)。你只需要向下選擇一個你想要的,然後按下回車轉到它。

  另一個有用的命令是Ctrl + P(引數資訊),在方法和建構函式的引數處使用它來獲得一個彈出視窗顯示引數的名稱和型別。而在Emacs中,從某種意義上來說這不是導航,你將不得不去方法或建構函式的定義處去找到這些資訊。

  上述所有的命令是難以置信的節省時間。在Emacs中,你需要自己轉到檔案以便找到你所需要的。而在IntelliJ IDEA中,它是自動的。事實上,我注意到,在我使用C++和Emacs的日子裡,比起Java我定義的類趨向於更大,方法少而且長。我想一個原因是,當一切操作都在同一個檔案中時Emacs導航更加容易,但是對於具有巨大導航功能的 IntelliJ IDEA來說,如果功能分散在多個檔案中也並沒有多大的關係.

  其他優勢

  除了導航,IntelliJ IDEA在很多方面都具備優勢。雖然這兩種環境都有語法高亮, IntelliJ IDEA在此之上增加了一個新的有用功能。靜態的方法和變數以斜體顯示,沒有使用的變數或方法會變灰。當然,IntelliJ IDEA會用紅色標註任何你輸入的語法錯誤。沒有必要再去為了檢查錯誤編譯程式-它會實時地幫你完成。

  在實際編碼時IntelliJ IDEA也會有一些非常有用的功能。首先就是名稱的自動補全,鍵入一個變數或方法名的幾個字母,按Ctrl+空格鍵,名稱會被補全。或者在點後按Ctrl+空格可以檢視一個物件的可用方法。

  另一個功能,根據IntelliJ IDEA的使用統計資料,是我用的最多的一個單一功能,那就是語法的自動選擇。當你反覆按下 Ctrl + W,他對程式碼的選擇部分會越來越大。例如,它就會選擇一個方法名,然後是一個表示式,再然後是整個語句,最後是整個程式碼塊。這在搜尋,排版縮排,註釋程式碼時非常有用。

  當然,還有重新命名支援。在Emacs中,如果我重新命名一個方法名稱,我需要做查詢和替換。但是對於每一個替換,我不得不檢查以確保我不會一不小心改變不應該改變的東西。如果方法是公有的,我又必須在其他類中找到出現的地方。在IntellJ IDEA中,這就變成一件非常容易的事情。僅僅需要選擇方法名,按下Ctrl+F6,輸入新的名字,然後敲回車。所有檔案中方法名出現的所有地方都將會被替換。

  對IDE毫無根據的顧慮

  我經常會看到一些評論,關於如何你如果使用了IDE,你就必須很多時候在使用使用滑鼠和選單。這是完全錯誤地。我在所有的程式中都喜歡用快捷鍵,儘量不用滑鼠。IntelliJ IDEA對於所有的命令都有強大的快捷鍵繫結,而且很容易增加新的或者修改現有的命令。所以你需要使用滑鼠和選單的情況並不多。以上我提到的所有命令都是用快捷鍵訪問的。

   另一個毫無根據的顧慮是你只能做那些列在IDE選單中的操作。這也是一個不能成立的觀點。就我而言,我所做的正和我在emacs中的一樣,即編寫和編輯程式碼。唯一的區別是,IntelliJ IDEA更快更準確。

 還有一個普遍的擔心,即你會被強制帶入到IDE“封閉的環境中”。好了,沒有什麼可以阻止你在需要的時候使用其他具。原始碼樹一直在那裡存在。退出IDE,去用任何你需要的工具,然後再返回來。例如,我有時需要跨越好幾個IntelliJ IDEA工程使用grep。在這些情況下,我就會用一個合適的正規表示式來使用grep。沒有什麼大不了的。

  最後,我還看到的一種說法是IDE到處加了配置和後設資料檔案。在IntelliJ IDEA中,只有3個工程檔案被加到了目錄結構的根目錄下。就是這樣。非常的不起眼。

  你不知道你錯過了什麼

  非常有趣的一件事是,在我換用IntelliJ IDEA之前我非常喜歡用Emacs。我已經學到了很多快捷操作,已經變得非常善於編輯。我也非常善於使用grep,查詢以及使用目錄結構中的其他的Unix命令,因此並沒有覺得我還缺少什麼工具。快速說明一下:Unix命令列工具最好的來源是 Unix Power Tools。

當我開始用Symsoft時,幾乎所有的開發人員都在使用 IntelliJ IDEA。所有就很自然地嘗試了。我很快發現可以用它能做什麼,並且永不回頭。事實上,一旦意識到它可以做一些酷的東西,我就堅持展示它給我的前同事看。無論何時,只要我和他們共進完午餐,我都會帶他們來到我的辦公室。給他們展示一些IntelliJ IDEA的招數,眼見為實。

  但是一個好的編輯器總會有自己的空間

  對於一個好的文字編輯器來說總會有一些有用的地方。即使我沒有用Emacs寫java,我還是幾乎每天都在用它。這是我編輯文字檔案的選擇,我也偶然用它編寫bash和ruby指令碼。

  然而,就在前幾天,我的一個同事提出了關於文字編輯器的話題。他提到他開始學習VIM,本著確保我知道我錯過了什麼的精神,我也會試試看。所以過會兒,我將會用Vim代替Emacs。讓我們看看結果會如何呢。

  原文連結: henrikwarne   翻譯: 伯樂線上 - hahakaka

相關文章