爭論
有一些沒有唯一正確答案的“永恒”的問題,例如,更好的是:Windows還是Linux搔谴,Java還是C#干旁;誰更強(qiáng)大:Chuck Norris還是Van Damme驶沼。
其中的一個(gè)Holy War便是Java和IDE的選擇:
有許多爭論的話題是討論它們哪個(gè)有更多的插件、快捷鍵等等争群。它們之間有太多的不同而很難決定什么才是最重要的回怜。
因此,人們都表示兩個(gè)IDE在功能上都差不多换薄,選擇某一個(gè)則是個(gè)人喜好問題了玉雾。
我認(rèn)為這不僅僅是個(gè)人喜好的問題翔试,有客觀的原因能表明:Intellij IDEA 肯定比 Eclipse 更好。
我不會去大量比較兩者細(xì)微不同复旬,例如插件與快捷鍵之類的垦缅。因?yàn)橛幸幌盗械腷log是關(guān)于這些的。我將會展示IDEA與Eclipse的一個(gè)最大的不同之處驹碍。通常IDEA和Eclipse的擁護(hù)者都不曾了解壁涎。
前者已經(jīng)習(xí)慣性的使用著它而不曾想象IDE缺少它會怎樣,后者則沒有使用它的習(xí)慣且難以想象有了它IDE能做得這么好志秃。Eclipse的用戶在把玩IDEA的時(shí)候通常都不會意識到這個(gè)不同點(diǎn)怔球,因?yàn)樗麄兞?xí)慣了以Eclipse模式工作。
為何我如此確信浮还?
在開始說明之前庞溜,讓我解釋一下我是誰和為什么我的觀點(diǎn)值得一聽。
我使用Eclipse已經(jīng)5年之久碑定,我很了解它流码,我為它編寫插件并真心地喜愛它。然后延刘,我換了一個(gè)公司工作漫试,并被強(qiáng)行轉(zhuǎn)移到IDEA上開發(fā),在這次“分手”后碘赖,我才最終意識到為什么IDEA更加敏銳驾荣。而如今我我已經(jīng)使用IDEA一些年了,所以我能比較它們兩者普泡,因?yàn)槲伊私馑鼈儭?/p>
IDEA與Eclipse主要的不同
IDEA之所以更加敏銳的原因是:IDEA懂得上下文播掷。這也是JetBrains員工命名IDEA為intelligent的原因。它真正的含義又是什么呢撼班?
IDEA檢索你的整個(gè)項(xiàng)目歧匈,分析項(xiàng)目所有的內(nèi)容,甚至構(gòu)建語法樹砰嘁。幸虧有它件炉,在任何時(shí)候無論你將鼠標(biāo)放置在哪里,IDEA都知道你在哪里并知道在那能干什么矮湘。
仍舊不了然斟冕?別擔(dān)心,在列舉了以下幾個(gè)例子后缅阳,一切就清楚了磕蛇。
這種對上下文的理解表現(xiàn)在很多很多方式上,以下只是其中的一部分。
1秀撇、調(diào)試
通常在調(diào)試過程中超棺,我們想要求一些表達(dá)式的值,在Eclipse中你需要選定這個(gè)表達(dá)式捌袜,選定整個(gè)表達(dá)式非常重要说搅,否則你就沒法求出它的值。然后虏等,你可以使用Ctrl+Shift+I看到這個(gè)表達(dá)式的值弄唧。
使用IDEA你不需要選擇任何東西,你只需要把光標(biāo)移到你的表達(dá)式中然后按下Alt+F8霍衫。IDEA會很好的理解這個(gè)你可能需要的表達(dá)式候引,然后顯示一個(gè)對話窗口,其中有一些它給出的建議參數(shù)變量敦跌。你也可以編輯并在對話框中立即將得到這個(gè)表達(dá)式的值澄干。相當(dāng)?shù)姆奖悖≡囘^這個(gè)特性后柠傍,你就不會再想在Eclipse中調(diào)試了麸俘。
基本上在兩個(gè)IDE上都能讓你做同樣的事,但是使用IDEA會更加簡單和快速惧笛。對此我認(rèn)真的表示从媚,這個(gè)差異太大了:就像天堂跟人間一樣。在一個(gè)小小的IDEA對話窗口中就提供了自動完成患整,語法高亮以及你需要的一切拜效。
2、自動完成
自動完成使得IDE比notepad更加優(yōu)秀各谚,在這個(gè)領(lǐng)域能感知上下文的IDEA有了質(zhì)的飛躍紧憾。例如,我們開始如下一行代碼:
assertElement(By.id("errorMessage"),?vi
現(xiàn)在我們想要查找以vi開頭的選項(xiàng)有哪些昌渤。
IDEA怎么做的呢赴穗?無需等待任何的按鍵,它馬上就能理解assertElement需要一個(gè)Conditaion類的示例作為第二個(gè)參數(shù)愈涩,而在Condition類中有一個(gè)靜態(tài)變量名叫visible望抽。IDEA會直接建議這個(gè)唯一的有效選項(xiàng)。
然而履婉,Eclipse會怎么做呢?唉斟览,它不能理解上下文毁腿,它不知道光標(biāo)所在處就是assertElement方法的第二個(gè)參數(shù)。因此當(dāng)你按下“神圣”的Ctrl+Space時(shí),Eclipse只會簡單的顯示全局中以vi字母開頭的一切已烤。
在一個(gè)美麗的彈出框中我看到了很多漂亮的高亮的格式規(guī)范的無用的信息鸠窗。:(
3、重構(gòu)
專業(yè)的程序員能夠高效的使用IDE提供的重構(gòu)功能胯究。所有的現(xiàn)代IDE都提供許多印象深刻的重構(gòu)功能稍计。但是還是那句,IDEA的重構(gòu)功能也很聰明智能裕循。它們能讀懂你需要什么臣嚣,然后針對不同的情況提供給你最適合的解決方案。
例如剥哑,假設(shè)我們有一個(gè)assertErrorMessageIsHidden方法:
publicvoidassertErrorMessageIsHidden(){
assertElement(By.id("errorMessage"),?Condition.visible);
}
我們以字符串“errorMessage”作為該方法的一個(gè)參數(shù)硅则。
讓我們先從IDEA開始,將光標(biāo)放在任何字符串“errorMessage”上株婴,按Ctrl+Alt+P(代表“parameter”)怎虫,IDEA將會建議我們可能可以在哪些表達(dá)中用次字符串為參數(shù)。
當(dāng)“errorMessage”表達(dá)式被選定以后困介,IDEA將會建議一些可能的能用做該參數(shù)的變量名稱大审。
不時(shí)的驚喜
你會經(jīng)常地驚訝于IDEA的聰敏表現(xiàn),比如它為你提示一些選項(xiàng)的名稱座哩。它考慮到方法名稱徒扶,變量類型甚至是變量值,以及其他的此類變量的名稱八回,與之前你給定的此變量的名稱酷愧,除了忽略了你的生肖。相信我缠诅,你會想說“Wow,IDEA也能這樣溶浴?”,我想說至少每個(gè)月一次吧管引。
現(xiàn)在讓我們看看Eclipse是怎么樣給出建議的士败。
別忘了,選擇整個(gè)"errorMessage"表達(dá)式哦褥伴。選擇一個(gè)“推薦參數(shù)”的重構(gòu)功能(通過菜單谅将,沒有什么快捷鍵可供使用),獲得差不多相同的結(jié)果重慢,然而饥臂,Eclipse不會給出變量名提示選項(xiàng),但幸虧不會似踱。
結(jié)論
如果我們選擇Java IDE隅熙,那么Intellij IDEA肯定要比Eclipse好的稽煤。這不僅僅是個(gè)人喜好問題。從客觀上看囚戚,IDEA更好酵熙。它是的你能夠快捷地編寫和修改代碼。它給出恰當(dāng)?shù)拿Q提示驰坊,查找適合的方法匾二。它不需要你特別地選擇表達(dá)式便會猜測到你想要做的以及你想如何對它命名。IDEA預(yù)示著并給你提示拳芙。
P.S. Remarks
我認(rèn)為IDEA在作為Java IDE時(shí)確實(shí)比Eclipse更好察藐。如果你考慮他們其他方面的能力例如用于其他例如C++、Python态鳖、Scala的IDE上转培,或者是作為構(gòu)建桌面的應(yīng)用的平臺,Eclipse很有可能拔得頭籌浆竭。
事實(shí)上這是依賴于對他們的定義的浸须,Eclipse已將自己定位為一個(gè)抽象平臺,用來使用插件構(gòu)建任何工具邦泄,而IDEA則定位為一個(gè)“智能的Java IDE”删窒,而且它正如此。
作為紀(jì)念我就嘗試著列絕一些Eclipse可能比IDEA更好的地方:
Eclipse看上去更棒顺囊,所有大題小做的SWT以及本地控件都用的很值肌索。Eclipse看上去很穩(wěn)定的深思熟慮過的程序,它有著漂亮的字體以及圖標(biāo)特碳。然而當(dāng)?shù)谝谎劭吹絀DEA是诚亚,它像是作噱頭的玩具一樣,有著不完全的圖標(biāo)以及笨拙的Swing界面午乓。
Eclipse擁有更強(qiáng)的項(xiàng)目結(jié)構(gòu)支持站宗。在IDEA中,你的項(xiàng)目是有模塊組成益愈。在Eclipse中你擁有一個(gè)由工程組成的工作區(qū)梢灭,每個(gè)工程都能被單獨(dú)打開或關(guān)閉,分組或隱藏蒸其。但是你真的需要么敏释?
為Eclipse編寫插件似乎很簡單。
IDEA比Eclipse使用更多的系統(tǒng)資源摸袁。這其實(shí)也說得通--因?yàn)镮DEA做得更多钥顽。
最后,Eclipse是免費(fèi)的靠汁,然而IDEA Community版本已經(jīng)夠我用了耳鸯。
最后的建議
如果你需要漂亮的圖標(biāo)湿蛔,用來創(chuàng)建桌面程序的平臺膀曾,C++IDE或者你用一個(gè)低配的筆記本工作县爬,那么Eclipse可能對你來說是更好的選擇。但是如果你是一個(gè)正兒八經(jīng)的Java開發(fā)者添谊,你需要更快更方便的工具幫你集中注意于解決問題而不是讓你分心财喳,IDEA則正是你所需要的。
擴(kuò)展閱讀
IntelliJ Idea 常用快捷鍵 列表(實(shí)戰(zhàn)終極總結(jié)6摺!K弧泌枪!)
Spring注解@Resource和@Autowired區(qū)別對比
作者:彭博
來源:https://www.oschina.net/news/26929