Почему IDEA лучше Eclipse

Священный спор

Принято считать, что есть «вечные» вопросы, на которые нет правильного ответа. Например, что лучше: Windows или Linux, Java или C#; Чужой против Хищника или Чак Норрис против Ван Дамма.

Одним из таких холиваров считается выбор лучшей IDE для Java.

Eclipse vs IDEA

Идут постоянные споры о том, в которой из них больше плагинов, горячих клавиш и т.д. Различий так много, что трудно выбрать, какие из них важнее, и все сходятся в одном: обе IDE примерно одинаковы по своим возможностям, и выбор одной из них — это дело вкуса.

Так вот, я утверждаю, что это не просто дело вкуса. Есть объективные причины, почему

Intellij IDEA (как Java IDE) однозначно лучше, чем Eclipse.

Подчёркиваю, мы сейчас рассматриваем обе среды именно как Java IDE.

Я не буду приводить кучу мелких различий вроде плагинов, горячих клавиш и т.п. — этому посвящены многие страницы в интернете, например, эта: часть 1, часть 2, часть 3.

Объясню лишь одно, самое главное отличие. Как правило, о нём не знают ни идеяшники, ни эклипсофилы, ибо первые привыкли к нему и не знают, что в других IDE этого может и не быть, а вторые привыкли жить без него, и даже не догадываются, что может быть лучше. Более того, эклипсники его не замечают, когда пробуют IDEA ради интереса, ибо привыкли работать по-старому.

Откуда такая уверенность?

Но перед тем, как рассказывать про главное отличие IDEA, я хочу объяснить, почему к моему мнению стоит прислушаться.

Я работал на Eclipse лет 5, знал её очень хорошо, писал под неё плагины, и искренне любил её. Потом я перешёл в другую компанию, и был вынужден пересесть на IDEA. Пережив серьёзную ломку, я наконец понял, чем же IDEA круче. И вот уже пару лет работаю на IDEA. Поэтому я знаю, что говорю.


Основное различие между IDEA и Eclipse

Главная вещь, отличающая IDEA — она понимает контекст. Именно это имеют в виду сотрудники JetBrains, когда называют её «интеллектуальной» (intelligent). Что это значит? IDEA индексирует весь ваш проект, анализирует всё, что в нём есть, и даже строит синтаксическое дерево. Благодаря этому IDEA в любой момент, куда бы вы ни поставили курсор, знает, где мы находимся и что тут можно делать.

Непонятно? Ещё бы. Ничего, на примерах станет ясно.

Это умение понимать контекст выражается во многих и многих аспектах, приведу лишь некоторые.

1. Отладка

Чтобы при отладке увидеть значение какого-то выражения, в Eclipse необходимо сначала выделить это выражение. Причём выделить точно, случайно выделите лишний символ — Eclipse не поймёт. После этого жмём Ctrl+Shift+I и видим значение выражения.

eclipse_inspect.png

В IDEA же ничего выделять не надо, достаточно просто поставить курсор в нужное место (в данном случае на методе hasAttribute) и нажать Alt+F8. IDEA сама поймёт, какое выражение вам, вероятно, нужно, и тут же откроет диалог, где вы сможете редактировать выражение и сразу видеть его значение:

idea_inspect.png

Выходит, обе IDE в принципе позволяют делать одно и то же. Но в IDEA это намного удобнее и быстрее. Я серьёзно, разница огромная — это просто небо и земля. В этом маленьком окошке IDEA сделает вам и автозаполнение, и подсветку синтаксиса, и всё на свете.

2. Автозаполнение (autocomplete)

Автозаполнение — это то, что выгодно отличает любую IDE от notepad. И в этой области «понимание контекста» даёт IDEA качественное преимущество. Допустим, мы начали писать строчку кода:

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

И тут мы хотим узнать, какие у нас есть варианты, чего там может начинаться с букв «vi».

Что делает IDEA? Не дожидаясь никаких нажатий клавиш, она сразу же понимает, что метод assertElement хочет получить вторым параметром объект класса Condition, а в этом классе как раз есть статическая переменная типа Condition с именем visible. И предлагает единственный возможный вариант: idea_autocomplete.png

А что делает Eclipse? Увы, он не понимает контекста. Он не знает, что курсор находится на месте второго параметра метода assertElement. Поэтому, когда вы нажимаете заветные Ctrl+Space, Eclipse тупо показывает всё, что есть в природе, что начинается на буквы «vi»:

eclipse_autocomplete.png

В красивом всплывающем окошке мы видим много-много красиво подсвеченной хорошо задокументированной бесполезной информации… :(

3. Рефакторинг

Профессиональные программисты умеют быть продуктивными, используя для изменения кода те рефакторинги, которые предлагает их IDE. Все современные IDE в принципе предлагают весьма впечатляющий набор рефакторингов, наверное, даже большинство программистов не знает и не использует все из них. Но опять же, рефакторинги в IDEA интеллектуальные. Они догадываются, чего вы хотите, и предлагают разные варианты, которые в большинстве ситуаций подходят.

Например, есть у нас метод assertErrorMessageIsHidden:

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

И мы хотим сделать так, чтобы строка «errorMessage» приходила в метод как параметр.

Начнём с IDEA. Ставим курсор на любое место в строке «errorMessage», нажимаем заветные Ctrl+Alt+P (от «parameter»), и IDEA подсказывает, какое выражение мы могли бы вынести в параметр:

idea_refactoring.png

Как только выражение «errorMessage» выбрано, IDEA подсказывает несколько возможных имён для этого параметра.

idea_name_parameter.png

Вы будете ещё не раз удивлены тем, как умно себя ведёт IDEA, предлагая свои варианты для имени чего-либо. Она учитывает и название метода, и тип переменной, и значение, и названия подобных переменных в других местах, и те названия, которые вы давали подобным переменным раньше — разве что ваш знак зодиака не учитывается. Правда-правда, не проходит и месяца, чтобы я не сказал фразы: «Ого, IDEA и это умеет?»

Ну и посмотрим, что нам предложит Eclipse.

Не забываем: выделяем выражение «errorMessage» (обязательно с кавычками, иначе получите дикое сообщение «An expression must be select to activate this refactoring»), выбираем рефакторинг «Introduce parameter» (из меню, горячей клавиши нет), и получаем тот же результат. Правда, никаких вариантов для имени параметра Eclipse не предлагает, но и на том спасибо.

eclipse_refactoring.png

Выводы

Если мы говорим о Java IDE, то IDEA круче Eclipse. Это не просто дело вкуса. IDEA объективно лучше. Она позволяет быстрее и качественне писать и менять код, подсказывает подходящие имена, находит подходящие методы. Не требует точно выделить выражение, а по тому, где вы находитесь, угадывает, что вы хотели сделать и как хотели это назвать. IDEA предугадывает и подсказывает.

P.S. Оговорки

Оговорюсь: IDEA лучше Eclipse в качестве Java IDE. Если вы рассматриваете их в каком-то другом качестве — например, как IDE для другого языка (C++, Python, Scala), или как платформу для построения Desktop-приложений, то Eclipse вполне может победить.

В общем-то, это вытекает и из определения. Eclipse позиционирует себя как абстрактная платформа для построения чего бы то ни было (с помощью дописывания плагинов), а IDEA позиционирует себя как «интеллектуальная IDE для Java». Так оно и есть.

Интереса ради попробую назвать аспекты, в которых Eclipse, возможно, круче IDEA:

Итогошки

Если вам нужны красивые иконки, платформа для создания настольных приложений, или IDE для C++, то Eclipse, вероятно, предпочтительнее. Если же вы серьёзный Java-программист, и вам нужна среда, позволяющая быстро и удобно вести разработку, сосредоточившись на проблеме и не отвлекаясь на средство разработки, то IDEA — это то, что нужно.

На этом, я надеюсь, один вечный спор можно считать законченным.

Кодьте с удовольствием!