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

в 9:18, , рубрики: eclipse, IDE, idea, java, метки: , , ,

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

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

Одним из таких холиваров считается выбор лучшей IDE для Java:
JAVA / Почему IDEA лучше Eclipse

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

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

Intellij IDEA однозначно лучше, чем Eclipse.

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

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

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

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

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

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

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

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

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

1. Отладка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выводы

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

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

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

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

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

  • Eclipse красивее. Вся эта суета вокруг SWT и нативных контролов стоила того. Eclipse выглядит как солидное приложение с продуманными шрифтами и иконками, в то время как IDEA на первый взгляд выглядит как наколенная поделка с ламерскими иконками и нелепым свинговским интерфейсом.
  • В Eclipse богаче поддережка структуры проекта. В IDEA есть проект, состоящий из модулей, а в Eclipse есть workspace, состоящий из проектов, но их можно ещё и закрывать/открывать, объединять в группы и прятать.
  • Для Eclipse вроде бы проще писать плагины.
  • В конце концов, Eclipse бесплатен. Впрочем, бесплатной версии IDEA мне хватает за глаза, ведь я использую запускалку для разработки веб-приложений.

Итогошки

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

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

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

Автор: asolntsev

  1. Victor:

    Некоторые аспекты, приведенные в статье, возможно подтолкнули к решаещему выводу. Однако не стоит заблуждаться. Eclipse JDT (то что для разработки на Java) также индексирует весь ваш проект, анализирует всё, что в нём есть, и даже строит синтаксическое дерево. Для этого надо или трезво взглянуть на процесс работы в IDE, или заглянуть в исходники JDT (лично проделал и то и другое, мой опыт работы С Eclipse – 8 лет).

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js