`

为什么IDEA比Eclipse更好?

 
阅读更多

为什么IDEA比Eclipse更好?

2012-03-20 09:03|22103次阅读|来源:dzone【已有135条评论】发表评论

关键词:Eclipse,IDEA,IntelliJ|作者:Andrei Solntsev|收藏这篇资讯

有一些没有唯一正确答案的“永恒”的问题,例如哪个更好:是Windows还是Linux,Java还是C#;谁更强壮:Chuck Norris还是Van Damme。其中的一个圣战便是Java IDE的选择:

有许多争论的话题是讨论它们哪个有更多的插件、快捷键等等。它们之间有太多的不同而很难决定什么才是最重要的。因此,人们都表示两个IDE在功能性上都差不多,选择某一个则是个人喜好问题了。我认为这不仅仅是个人喜好的问题,有客观的原因能表明:Intellij IDEA肯定比Eclipse更好。

我不会去大量比较两者细微不同,例如插件与快捷键之类的。因为有一系列的blog是关于这些的,例如:[part 1] [part 2] [part 3]。我将会展示IDEA与Eclipse的一个最大的不同之处。通常IDEA和Eclipse的fans都不曾了解。前者已经习惯性的使用着它而不曾想象 IDE缺少它会怎样,后者则没有使用它的习惯且难以想象有了它IDE能做得这么好。Eclipse的用户在把玩IDEA的时候通常都不会意识到这个不同点,因为他们习惯了以Eclipse模式工作。

为何我如此确信?

在开始说明之前,让我解释一下我是谁和为什么我的观点值得一听。

我使用Eclipse已经5年之久,我很了解它,我为它编写插件并真心地喜爱它。然后,我换了一个公司工作,并被强行转移到IDEA上开发,在这次 “分手”后,我才最终意识到为什么IDEA更加敏锐。而如今我我已经使用IDEA一些年了,所以我能比较它们两者,因为我了解它们。

IDEA与Eclipse主要的不同

IDEA之所以更加敏锐的原因是:IDEA懂得上下文。这也是JetBrains员工命名IDEA为intelligent的原因。它真正的含义又是什么呢?IDEA检索你的整个项目,分析项目所有的内容,甚至构建语法树。幸亏有它,在任何时候无论你将鼠标放置在哪里,IDEA都知道你在哪里并知道在那能干什么。

仍旧不了然?别担心,在列举了以下几个例子后,一切就清楚了。

这种对上下文的理解表现在很多很多方式上,以下只是其中的一部分。

1.调试

通常在调试过程中,我们想要求一些表达式的值,在Eclipse中你需要选定这个表达式,选定整个表达式非常重要,否则你就没法求出它的值。然后,你可以使用Ctrl+Shift+I看到这个表达式的值。

使用IDEA你不需要选择任何东西,你只需要把光标移到你的表达式中然后按下Alt+F8。IDEA会很好的理解这个你可能需要的表达式,然后显示一个对话窗口,其中有一些它给出的建议参数变量。你也可以编辑并在对话框中立即将得到这个表达式的值。相当的方便!试过这个特性后,你就不会再想在 Eclipse中调试了。

基本上在两个IDE上都能让你做同样的事,但是使用IDEA会更加简单和快速。对此我认真的表示,这个差异太大了:就像天堂跟人间一样。在一个小小的IDEA对话窗口中就提供了自动完成,语法高亮以及你需要的一切。

2.自动完成

自动完成使得IDE比notepad更加优秀,在这个领域能感知上下文的IDEA有了质的飞跃。例如,我们开始如下一行代码:

assertElement(By.id("errorMessage"), vi

现在我们想要查找以vi开头的选项有哪些。

IDEA怎么做的呢?无需等待任何的按键,它马上就能理解assertElement需要一个Conditaion类的示例作为第二个参数,而在Condition类中有一个静态变量名叫visible。IDEA会直接建议这个唯一的有效选项。

然而,Eclipse会怎么做呢?唉,它不能理解上下文,它不知道光标所在处就是assertElement方法的第二个参数。因此当你按下“神圣”的Ctrl+Space时,Eclipse只会简单的显示全局中以vi字母开头的一切。

在一个美丽的弹出框中我看到了很多漂亮的高亮的格式规范的无用的信息。

3.重构

专业的程序员能够高效的使用IDE提供的重构功能。所有的现代IDE都提供许多印象深刻的重构功能。但是还是那句,IDEA的重构功能也很聪明智能。它们能读懂你需要什么,然后针对不同的情况提供给你最适合的解决方案。

例如,假设我们有一个assertErrorMessageIsHidden方法:

public void assertErrorMessageIsHidden() {
  assertElement(By.id("errorMessage"), Condition.visible);
}

我们以字符串“errorMessage”作为该方法的一个参数。

让我们先从IDEA开始,将光标放在任何字符串“errorMessage”上,按Ctrl+Alt+P(代表“parameter”),IDEA将会建议我们可能可以在哪些表达中用次字符串为参数。

当“errorMessage”表达式被选定以后,IDEA将会建议一些可能的能用做该参数的变量名称。

每月惊奇

你会经常地惊讶于IDEA的聪敏表现,比如它为你提示一些选项的名称。它考虑到方法名称,变量类型甚至是变量值,以及其他的此类变量的名称,与之前你给定的此变量的名称,除了忽略了你的生肖。相信我,你会想说“Wow,IDEA也能这样?”,我想说至少每个月一次吧。

现在然我们看看Eclipse是怎么样给出建议的。

别忘了,选择整个"errorMessage"表达式哦。选择一个“推荐参数”的重构功能(通过菜单,没有什么快捷键可供使用),获得差不多相同的结果,然而,Eclipse不会给出变量名提示选项,但幸亏不会。

结论

如果我们选择Java IDE,那么Intellij IDEA肯定要比Eclipse好的。这不仅仅是个人喜好问题。从客观上看,IDEA更好。它是的你能够快捷地编写和修改代码。它给出恰当的名称提示,查找适合的方法。它不需要你特别地选择表达式便会猜测到你想要做的以及你想如何对它命名。IDEA预示着并给你提示。

P.S. Remarks

我认为IDEA在作为Java IDE时确实比Eclipse更好。如果你考虑他们其他方面的能力例如用于其他例如C++、Python、Scala的IDE上,或者是作为构建桌面的应用的平台,Eclipse很有可能拔得头筹。

事实上这是依赖于对他们的定义的,Eclipse已将自己定位为一个抽象平台,用来使用插件构建任何工具,而IDEA则定位为一个“智能的Java IDE”,而且它正如此。

作为纪念我就尝试着列举一些Eclipse可能比IDEA更好的地方:

  • Eclipse看上去更棒,所有大题小做的SWT以及本地控件都用的很值。Eclipse看上去很稳定的深思熟虑过的程序,它有着漂亮的字体以及图标。然而当第一眼看到IDEA是,它像是作噱头的玩具一样,有着不完全的图标以及笨拙的Swing界面。
  • Eclipse拥有更强的项目结构支持。在IDEA中,你的项目是有模块组成。在Eclipse中你拥有一个由工程组成的工作区,每个工程都能被单独打开或关闭,分组或隐藏。但是你真的需要么?
  • 为Eclipse编写插件似乎很简单
  • IDEA比Eclipse使用更多的系统资源。这其实也说得通--因为IDEA了解得更多
  • 最后,Eclipse是免费的,然而IDEA Community版本已经够我用了

最后的建议

如果你需要漂亮的图标,用来创建桌面程序的平台,C++IDE或者你用一个低配的笔记本工作,那么Eclipse可能对你来说是更好的选择。但是如果你是一个正儿八经的Java开发者,你需要更快更方便的工具帮你集中注意于解决问题而不是让你分心,IDEA则正是你所需要的。

文章出自:dzone

译文出自:oschina

分享到:
评论
1 楼 dreaming0625 2012-05-31  
,

相关推荐

    2024年全国职业院校技能大赛集成电路应用开发赛项竞赛试题(04 卷)

    2024年全国职业院校技能大赛集成电路应用开发赛项竞赛试题(04 卷)

    Bihl+Wiedemann BWU376024 ASi-3 PROFINET 网关,单主站 GSD文件

    Bihl+Wiedemann BWU376024 ASi-3 PROFINET 网关,单主站 GSD文件

    植物大战僵尸.docx

    《植物大战僵尸》是一款由美国宝开游戏公司(PopCap Games)开发的益智策略类塔防游戏,于2009年5月5日正式发售。这款游戏以其独特的玩法和丰富的角色设定吸引了大量玩家。 首先,游戏的核心玩法是玩家通过种植不同的植物来防御入侵的僵尸。游戏中植物种类繁多,每种植物都有其独特的攻击方式和功能,如豌豆射手、向日葵、樱桃炸弹等。其中,豌豆射手作为玩家的第一道防线,能够发射豌豆攻击僵尸;向日葵则是收集阳光的重要来源,为种植更多植物提供能量;樱桃炸弹则能一次性炸飞一片区域内的所有僵尸。 其次,游戏中的僵尸种类也非常丰富,从最基本的普通僵尸到拥有各种特殊能力的僵尸,如路障头僵尸、撑杆跳僵尸、铁桶头僵尸等,每种僵尸都有其独特的特性和攻击方式。玩家需要根据不同僵尸的特点,合理安排植物的种植位置和种类,以达到最佳的防御效果。 此外,游戏还设置了多种游戏模式,如冒险模式、小游戏、解密模式等,让玩家在游戏中体验不同的挑战和乐趣。同时,游戏还支持多人合作玩法,玩家可以与朋友一起合作抵御僵尸的入侵。 总的来说,《植物大战僵尸》以其独特的玩法、丰富的角色设定和多样化的游戏模式,成为了一款备受欢迎的游

    2024年全国职业院校技能大赛集成电路应用开发赛项竞赛试题(03卷)

    2024年全国职业院校技能大赛集成电路应用开发赛项竞赛试题(03卷)

    (人事)档案室安全设备明细表.docx

    (人事)档案室安全设备明细表.docx

    rabbitmq面试题.pdf

    以下是针对RabbitMQ的一些面试题,覆盖了基础概念、架构、特性、使用场景、性能、监控与管理等多个方面: ### 基础概念 1. RabbitMQ是什么?它是如何工作的? 2. 解释RabbitMQ中的生产者、消费者、队列和交换器。 3. 什么是消息队列(Message Queueing),使用消息队列有什么好处? 4. RabbitMQ中的交换器有哪些类型? 5. 什么是死信队列(Dead-Letter Queue)? 6. 解释RabbitMQ中的消息确认机制。 7. 什么是RabbitMQ中的持久化消息(Persistent Message)? 8. 如何理解RabbitMQ的发布订阅模型? ### 高级特性 9. 什么是RabbitMQ的路由(Routing)? 10. 解释RabbitMQ中的主题交换器(Topic Exchange)和如何使用。 11. RabbitMQ支持哪些高级消息模式?例如RPC。 12. 什么是RabbitMQ的消息重试机制? 13. 解释RabbitMQ的集群,它是如何工作的? 14. RabbitMQ的镜像队列(Mirrored Queue

    一种基于红外测温传感器的高速电吹风高精度体感控温解决方案

    主要分享了红外非接触测温传感器在智能高速电吹风上的一种做提感温度控制的方案,目前当下绝大部分电吹风在温控上都是控制出风口温度。但在实际生活使用过程中吹风口距离头发或者皮肤的距离是不断变化的,因此感受到的风温也是变化的。这种情况一般会有两个潜在问题,比如婴幼儿吹干时可能会有过热烫伤风险,还有可能会因为距离过近温度过高而损伤发质。里面分享了一家专业做红外测温传感器的原厂在如何做恒温体感温度上的一些经验,行业应用实现了迈莱芯的国产替代。通过红外测温传感器直接检测头发或者皮肤温度,因为其高响应率,0.1s即可将检测的数值反馈给控制单元,在及时调整发热体功率,从而实现相对恒定的体感温度。目前传感器主要安装在出风口位置或者内嵌下沉到底部,工作环境比较恶劣,整个开发过程中需要做各种测试,摸清电吹风各种工作模式下的热模型,再针对性的做算法,里面罗列了部分踩过的大坑和应对方案。该分享适用于做电吹风的电控板设计公司、整机方案商、电吹风整机ODM工厂和电吹风品牌公司做参考设计。

    Java版贪吃蛇小游戏(保姆级:每步均有注释)

    Java版贪吃蛇小游戏(保姆级:每步均有注释)

    18783027252-2405121303.amr

    18783027252-2405121303.amr

    高等职业教育品牌专业申报表.doc

    高等职业教育品牌专业申报表.doc

    2024-2030中国IGBT市场现状研究分析与发展前景预测报告 Sample.pdf

    QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com

    一个微信小程序开发的二手物品交易小程序 .zip

    微信小程序开发项目 微信小程序在产品功能设计上给用户更多控制力。在微信小程序的设置页,为用户提供了数据权限开关,一旦用户授权之后又关闭,微信小程序再次使用该用户数据时需要重新获得授权,为用户提供更方便的数据控制权。用户在微信小程序的资料页还可以看到隐私数据保护的提示以及投诉入口。 微信小程序在收集、获取用户数据上,微信小程序坚持“必要+合理”原则。必要是指只有在微信小程序的具体业务中,确实有场景需要获取用户数据的情况下,开发者才能去获取用户的同意授权;合理是指开发者获取数据的范围不应该超出具体场景所需要的数据范围。例如一个提供外卖服务的微信小程序,可能需要获得电话、地址等数据,但没有必要获取性别、年龄等数据,否则平台会认为微信小程序收集用户数据的行为违反了“必要并且合理”的原则,会对这类微信小程序进行处理。 [8] 2022年5月2日消息,据微信方面发布,部分小程序开发者不合理地要求用户授权提供手机号等个人信息,中断了正常的使用流程,影响了用户的使用体验,同时会带来个人隐私信息泄露的风险。这种行为违反了《微信小程序平台运营规范》的用户隐私和数据规范

    考生签到记录表.docx

    考生签到记录表.docx

    模拟退火算法的 MATLAB 代码

    模拟退火算法matlab代码 代码说明 初始参数: T:初始温度。 T_min:停止温度。 alpha:温度衰减率。 max_iter:每个温度下的最大迭代次数。 x:初始解,设置为随机值。 主循环: while T > T_min: 温度逐渐降低,直到低于最低温度。 在每个温度 T 下进行 max_iter 次迭代。 在每次迭代中,生成一个邻域解 x_new,并根据 Metropolis 准则决定是否接受新解。 每次迭代后打印当前状态。 目标函数 (objective_function):这里使用了一个简单的单位一元二次函数 x^2 + 4 * sin(5 * x) 作为例子,但你可以替换为你自己的目标函数。 邻域生成函数 (neighbor):生成一个新解,模拟退火算法通常通过对当前解进行微小随机扰动生成邻域解。

    C语言超市管理系统.zip

    C语言超市管理系统

    2024-2030中国N甲基吡咯烷酮市场现状研究分析与发展前景预测报告 Sample.pdf

    QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com

    HTML5小游戏【龟兔再跑之乌龟乌龟跳-425款经典优秀H5小游戏合集】游戏源码分享下载 - gtzp.zip

    HTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集

    python 比较 mysql 表结构差异

    python 比较 mysql 表结构差异

    ASP.NET报名管理信息系统(源代码)

    本系统开发的初衷就是为了满足培训机构的需要,使其在培训管理过程中所进行的各项日常工作像处理学生信息、打印报表、统计分析等都利用计算机实现自动化,避免大量繁杂的手工劳动,提高办公效率。

    基于Python 实现半监督密度聚类+增量学习的故障诊断

    【作品名称】:基于Python 实现半监督密度聚类+增量学习的故障诊断 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:整体架构 故障诊断模块 半监督标记模块 增量更新模块 故障诊断模块读取设备监测数据,根据数据判断设备是否处于正常状态,如果出现故障,判断设备发生何种故障; 半监督标记模块首先判断设备监测数据中是否存在未知的故障类别样本,并对所有无标签的设备监测数据(包括已知故障类别与未知故障类别样本)标记伪标签,最后输出带有伪标签的样本以辅助增量更新模块对故障诊断模块进行更新; 增量更新模块使用半监督标记模块输出的伪标签样本对故障诊断模块进行增量地更新 环境配置 python3.6 tslearn 0.5.0.5 tslearn是一个Python软件包,提供了用于分析时间序列的机器学习工具。 scikit-learn 0.23.2 机器学习库 pytorch 1.7.0 深度学习库 dcipy 科学计算 numpy 1.19.2 矩阵计算 h5py 2.10.0 用来存储使用h5文件。

Global site tag (gtag.js) - Google Analytics