intellij idea комментирование кода
Записки программиста
Краткая шпаргалка по сочетаниям клавиш в IntelliJ IDEA
Как ранее уже сообщалось, я начал активно изучать возможности IntelliJ IDEA. В частности, я стараюсь запомнить наиболее востребованные хоткеи, чтобы выполнять большую часть работы, не отрывая руки от клавиатуры, как это происходит при программировании в Vim. По моим наблюдениям, это реально экономит кучу времени. Я сделал для себя шпаргалку по хоткеям IDEA, которую вы найдете под катом. Полагаю, она также пригодится кому-то из посетителей данного блога.
Примечание: Те же сочетания клавиш работают и в других продуктах JetBrains, например, PyCharm и CLion.
Ниже не приводятся общеизвестные и очевидные сочетания вроде Ctr+C, Ctr+V или Ctr + S. В IntelliJ IDEA многие хоткеи имеют парный хоткей отличающийся только тем, что в нем дополнительно участвует клавиша Shift. Обычно она добавляет в том или ином виде выделение текста. Например, Ctr + End переводит курсор в конец файла, а Ctr + Shift + End выделяет код от текущей позиции до конца файла. Догадаться о существовании парных хоткеев несложно, поэтому далее они не приводятся. Наконец, если в любом диалоге IntelliJ IDEA вы видите подчернутые буквы, знайте, что сочетание Alt + буква равносильно использованию соответствующего контрола (обычно кнопок). Например, быстро запушить код в репозиторий можно путем нажатия Ctr + K, Alt + I, Alt + P, а затем снова Alt + P.
Итак, основные сочетания следующие.
Редактирование:
Окна, вкладки:
Alt + влево/вправо | Перемещение между вкладками |
Ctr + F4 | Закрыть вкладку |
Alt + циферка | Открытие/закрытие окон Project, Structure, Changes и тд |
Ctr + Tab | Switcher, переключение между вкладками и окнами |
Shift + Esc | Закрыть активное окно |
F12 | Открыть последнее закрытое окно |
Ctr + колесико | Zoom, если он был вами настроен |
Закладки:
F11 | Поставить или снять закладку |
Ctr + F11 | Аналогично с присвоением буквы или цифры |
Shift + F11 | Переход к закладке (удаление — клавишей Delete) |
Ctr + Число | Быстрый переход к закладке с присвоенным числом |
Подсказки и документация:
Ctr + Q | Документация к тому, на чем сейчас курсор |
Ctr + Shift + I | Показать реализацию метода или класса |
Alt + Q | Отобразить имя класса или метода, в котором мы находимся |
Ctr + P | Подсказка по аргументам метода |
Ctr + F1 | Показать описание ошибки или варнинга |
Alt + Enter | Показать, что нам предлагают «лампочки» |
Поиск:
Дважды Shift | Быстрый поиск по всему проекту |
Ctr + Shift + A | Быстрый поиск по настройкам, действиям и тд |
Alt + вниз/вверх | Перейти к следующему/предыдущему методу |
Ctr + [ и Ctr + ] | Перемещение к началу и концу текущего скоупа |
Ctr + F | Поиск в файле |
Ctr + Shift + F | Поиск по всем файлам (переход — F4) |
Ctr + F3 | Искать слово под курсором |
F3 / Shift + F3 | Искать вперед/назад |
Ctr + G | Переход к строке или строке:номеру_символа |
Ctr + F12 | Список методов с переходом к их объявлению |
Ctr + E | Список недавно открытых файлов с переходом к ним |
Ctr + Shift + E | Список недавно измененных файлов с переходом к ним |
Ctr + H | Иерархия наследования текущего класса и переход по ней |
Ctr + Alt + H | Иерархия вызовов выбранного метода |
Ctr + N | Поиска класса по имени и переход к нему |
Ctr + Shift + N | Поиск файла по имени и переход к нему |
Ctr + B | Перейти к объявлению переменной, класса, метода |
Ctr + Alt + B | Перейти к реализации |
Ctr + Shift + B | Определить тип и перейти к его реализации |
Shift + Alt + влево | Перемещение назад по стеку поиска |
Shift + Alt + вправо | Перемещение вперед по стеку поиска |
F2 / Shift + F2 | Переход к следующей / предыдущей ошибке |
Shift + Alt + 7 | Найти все места, где используется метод / переменная |
Ctr + Alt + 7 | Как предыдущий пункт, только во всплывающем окне |
Генерация кода и рефакторинг:
Ctr + Space | Полный автокомплит |
Ctr + Shift + Space | Автокомплит с фильтрацией по подходящему типу |
Alt + / | Простой автокомплит по словам, встречающимся в проекте |
Ctr + I | Реализовать интерфейс |
Ctr + O | Переопределить метод родительского класса |
Ctr + J | Генерация шаблонного кода (обход по итератору и тд) |
Ctr + Alt + J | Обернуть выделенный код в один из шаблонов |
Alt + Insert | Генератор кода — сеттеров, зависимостей в pom.xml и тд |
Shift + F6 | Переименование переменной, класса и тд во всем коде |
Ctr + F6 | Изменение сигнатуры метода во всем коде |
F6 | Перемещение метода, класса или пакета |
F5 | Создать копию класса, файла или каталога |
Shift + F5 | Создать копию класса в том же пакете |
Alt + Delete | Безопасное удаление класса, метода или атрибута |
Ctr + Alt + M | Выделение метода |
Ctr + Alt + V | Выделение переменной |
Ctr + Alt + F | Выделение атрибута |
Ctr + Alt + C | Выделение константы (public final static) |
Ctr + Alt + P | Выделение аргумента метода |
Ctr + Alt + N | Инлайнинг метода, переменной, аргумента или константы |
Ctr + Alt + O | Оптимизация импортов |
Прочее:
Понятное дело, в этой шпаргалке названы далеко не все возможности IntelliJ IDEA. Всем заинтересованным лицам я настоятельно рекомендую вот прямо брать и читать ее замечательную документацию, там очень много интересного. Жаль только, что документация не доступна в виде одного большого PDF файла.
Дополнение: В последних версиях IDEA можно использовать несколько курсоров, разместив их либо при помощи комбинации Alt+Shift+ЛКМ, либо вертикальным выделением при помощи клика средней клавишей мыши. Держа на вооружении сочетание Ctr + влево/вправо, осуществляющего переход между словами, а также другие, можно очень удобно редактировать сразу несколько строк кода.
Подборка самых полезных горячих клавиш для различных IDE и редакторов кода
Хорошему программисту нужны хорошие инструменты для работы. Однако самих инструментов мало — нужно ещё владеть ими на должном уровне. Комбинация клавиш Ctrl+C Ctrl+V — незаменимый спутник каждого разработчика, однако в средах разработки есть гораздо больше полезных горячих клавиш, существенно повышающих продуктивность. Мы собрали для вас подборку полезных горячих клавиш для некоторых популярных IDE, чтобы вы могли похвастаться перед коллегами своими мега-скиллами разработки.
IntelliJ IDEA
IntelliJ IDEA — известная IDE от JetBrains для JVM-языков вроде Java, Scala и Kotlin. Укомплектована уникальными инструментами и позволяет без проблем ориентироваться в программе. Есть и другие IDE от тех же разработчиков, например, PyCharm для Python, WebStorm для JavaScript и не только. Они во многом схожи между собой, поэтому большинство из нижеуказанных горячих клавиш должно работать и в других IDE от JetBrains.
Eclipse
Если вы близки с open-source сообществом, то вы наверняка слышали об Eclipse. Будучи доступным для Linux, Windows и OS X, Eclipse де-факто является open-source IDE для разработки на Java. Существует множество расширений и аддонов, которые делают Eclipse полезным для разного рода задач и разработки на отличных от Java языках программирования вроде Python.
Visual Studio 2017
Visual Studio — полнофункциональная IDE от Microsoft, которая во многом сопоставима с Eclipse. Доступная на Windows и Mac OS, Visual Studio представлена как в бесплатном (Community), так и в платном (Professional и Enterprise) вариантах. Visual Studio позволяет разрабатывать приложения для разных платформ и предоставляет свой собственный набор расширений.
Доступный на всех платформах Atom называют «хакабельным текстовым редактором 21 века». Atom написан с использованием Electron — фреймворка для создания кроссплатформенных приложений для десктопа средствами JavaScript, HTML и CSS — и имеет множество расширений.
Visual Studio Code
Visual Studio Code (не путать с Visual Studio) — полнофункциональный редактор кода, доступный на Windows, Linux и Mac OS X. VS Code является расширяемым open-source редактором, который можно настроить под любую задачу. Как и Atom, VS Code построен на Electron, поэтому у него есть те же преимущества и недостатки.
Sublime Text
Sublime Text, написанный инженером из Google с мечтой о лучшем текстовом редакторе, является весьма популярным редактором кода. Доступный на всех платформах, Sublime Text имеет встроенную поддержку редактирования кода на разных языках, а также богатый набор расширений, называемых пакетами, которые расширяют возможности синтаксиса и редактирования.
Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.
Перейти к регистрации
Java Code Style: как правильно оформлять код Java
Статья об именах переменных, классов и методов, скобках, комментариях, форматировании кода и других правилах хорошего тона, принятых в языке Javа.
В языке Java, как и во многих других языках программирования, есть неофициальные, но принятые сообществом разработчиков соглашения по оформлению кода. Давайте попробуем разобраться, что это такое, как работает и почему важно.
Зачем нужен единый стиль кода
Java Code Style — это рекомендации и соглашения о стиле кода, собранные вместе. Например:
Регламентируется множество вещей, связанных с оформлением исходного текста программ, и приводятся требования, которые необходимо учитывать. Почему возникли эти стандарты?
Причины, по которым разработчики пришли к таким соглашениям, логичны и просты:
Использование общепринятых соглашений по оформлению позволяет сделать код более аккуратным, избежать ошибок, связанных с разными стилями написания у людей, работающих над одним проектом.
Преподаватель Skillbox. Пишет про Java, учит Go. Помнит рассвет PHP и как «грабить корованы».
Форматирование на практике
Стиль не играет роли для компьютера, но важен для чтения кода человеком. Наше зрение устроено так, что сперва получает и анализирует образы, а только затем мы вдаёмся в детали. А если блоки исходного текста унифицированы, разработчик понимает, что перед ним за конструкция, даже не вникая в сам код.
Настройка IDEA для чистокодеров
Я люблю две вещи: Intellij IDEA и чистый код (Clean Code).
IDEA создана для чистого кода. Многие настройки по умолчанию уже стимулируют вас писать как надо.
Но она всё ещё не идеальна.
Когда я устанавливаю новую копию IDEA, я пробегаю по настройкам и выставляю свои любимые галочки.
Хочу ими с вами поделиться в надежде, что когда-нибудь и они станут стандартом.
Чистый код — это
Давайте посмотрим, что нужно настроить в IDEA, чтобы она способствовала написанию чистого кода.
Мои любимые галочки
Стандартные заголовки
Первым делом я всегда удаляю самый большой буллщит в Intellij IDEA — стандартный заголовок файлов:
Вся информация об авторах и датах должна храниться в специально отведённом для этого месте — системе контроля версий. Я не хочу захламлять этим код!
Аналогичным образом удаляю стандартные заголовки для некоторых языков:
Неисключительные исключения
Примерно в том же меню я удаляю надоедливые «throws Exception» в шаблонах для JUnit:
Они не нужны в большинстве случаев и только загрязняют код.
Чем меньше кода, не несущего полезной логики — тем лучше!
А там, где они понадобятся, IDEA добавит их на раз.
За чистотой тестов надо следить ещё внимательнее, чем за чистотой кода!
Автоматический импорт
Дальше я ставлю галочку «auto import». Когда я пишу в коде новое имя класса, пусть IDEA сама его моментально импортирует. Почему я должен беспокоится о том, что компьютер может сделать за меня? Лучше я не буду отвлекаться от действительно важных мыслей.
Это аццки удобная фича, попробуйте!
Работа с вкладками
Дорогой Дед Мороз, пожалуйста, убери их вообще из настроек IDEA, а я обещаю вести себя хорошо!
Show usages
Далее я обязательно назначаю комбинацию клавиш Ctrl+F7 на действие «Show usages». Это очень удобное действие, я его использую, наверное, чаще всех остальных! По умолчанию у него какая-то другая комбинация клавиш, не такая удобная. А Ctrl+F7 по умолчанию делает что-то другое, не такое полезное.
А действие «Show Usages» показывает все места, где используется данная переменная/метод, прямо тут же, в маленьком всплывающем окошке. Это чертовски удобно, не нужно переключать внимание и переносить взгляд в другое место! По нему можно удобно бегать вверх-вниз стрелками и закрывать простым ESC. Навигация на кончиках пальцев!
Вот как выглядит Show Usages в действии:
ВерблюжьиГорбы
То есть если курсор стоит в начале слова AbstractStudentFactory, и я нажимаю Ctrl+вправо, я хочу, чтобы курсор скакнул к началу подслова «Student», а не сразу в конец. В IDEA по умолчанию ровно наоборот.
А второй там же, в подменю «Smart keys»:
Автосохранение файлов
Многие знают (или догадываются), что IDEA автоматически сохраняет файлы, когда ты переключаешься в другую программу. Или когда запускаешь тесты. Это здорово. Не нужно постоянно нажимать Ctrl+S.
Вы не поверите: я до сих пор не могу избавиться от привычки постоянно жать Ctrl+S, хотя пересел с Eclipse на IDEA уже три года назад! Вот какая вредная привычка.
Но ещё было бы полезно, если б IDEA сохраняла файлы и просто так, когда я иду за чаем. Поэтому ставлю галочку «Save files automatically»:
И благодаря этому могу смело поставить ещё одну галочку, чтобы IDEA не спрашивала меня «Are you sure you want to exit IDEA»?
Меня не надо об этом переспрашивать. Я не боюсь закрыть IDEA в любой момент, потому что всегда могу открыть её снова, и там будут все мои файлы в целости и сохранности.
Inspections
Автоматические проверки кода — в наше время обязательное умение для IDE. В IDEA их много, полезных и не очень, не буду тут все рассматривать. Но одну я ставлю обязательно, причём строго с приоритетом «Error»: это «Missing @ Override annotation».
Строго говоря, это не имеет отношения к чистому коду. Просто я однажды провёл несколько вечеров в поиске зловредной неповторяемой баги, которая случалась потому, что кто-то случайно написал в подклассе метод с таким же именем, как в суперклассе (а именно, метод setUp в тесте). С тех пор я ревностно ставлю проверку на отсутствующую аннотацию @ Override.
Частые коммиты
Одна из хороших практик правильного программирования — это частые небольшие коммиты. Каждый коммит должен быть атомарным и делать одно изменение, а не сразу кучу разных.
Когда я следую этим правилам и коммичу 3 файла из 8 (остальные 5 я собираюсь тут же послать следующим коммитом), IDEA предлагает перенести остальные 5 файлов в другой «changeset». Возможно, это когда-то могло показаться удачной идеей, но в большинстве случаев я всё-таки собираюсь вскоре закоммитить и остальные 5 файлов тоже. Поэтому отключаем эту галочку:
Далее, когда я сделал несколько маленьких коммитов и хочу это дело запушить (git push), я сталкиваюсь с проблемой, что в IDEA нет комбинации клавиш для Push, а искать эту команду в меню реально неудобно. Делаем свой шорткат Ctrl+Shift+K:
Это удобно запомнить: Ctrl+K — коммит, Ctrl+Shift+K — пуш.
Дорогой Санта, добавь Ctrl+Shift+K в IDEA по умолчанию?
Учите, учите и ещё раз учите шорткаты!
IDEA хороша тем, что все необходимые плагины в ней уже есть из коробки. Для большинства ежедневных потребностей не нужно что-то искать и устанавливать дополнительно.
Но один плагин я ставлю обязательно. Это Key Promoter plugin — надоедливый подсказчик, заставляющий меня учить шорткаты. Каждый раз, когда я выбираю какое-то действие мышкой, он тут же говорит мне: «А ты таки мог это сделать такой-то комбинацией клавиш!» Он такой надоедливый, что ты волей-неволей начинаешь использовать эти шорткаты, лишь бы не видеть его лишний раз.
Обратная связь
И наконец, последняя галочка. Я хочу, чтобы IDEA анализировала мою работу с ней и ежедневно посылала собранную информацию в JetBrains. Это мой вклад в развитие отличного продукта Intellij IDEA.
Дорогие ребята из JetBrains, если это вам поможет сделать IDEA ещё лучше — следите за мной, анализируйте меня, берите всё что потребуется!
Раздел «Refactor» в IDEA
Эту статью можно рассматривать как краткий обзор c gif-ками по рефакторингам Java-файлов в IDEA для начинающих.
Осторожно, много тяжелых gif-картинок.
«Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” —M. Fowler (1999)
Содержание
Введение
Думаю, каждый, кто работает в IDEA, знает, что в ней куча способов для рефакторинга кода. И почти уверен, что каждый второй смотрит анонсы новой версии, где красиво показаны новые способы рефакторинга и заглядывал в раздел Refaсtor:
Рис. 1. Раздел Refactoring IDEA
Но не уверен, что все точно знают что и как делают все элементы этого списка, хотя они все детально описаны в справки к idea
В статье представлены фрагменты кода, порядок действий и анимации почти для каждого пункта. Также постарался добавить, где возможно, ссылку на замечательную книгу Refactoring: Improving the Design of Existing Code (Martin Fowler). Чтобы не сильно раздувать трафик пришлось довольно сильно обрезать много gif-картинок, поэтому обязательно смотрите использованный код под катом. Горячие клавиши приведены для Windows/LInux по умолчанию.
Раздел «Refaсtor»
Пойдем сверху вниз по порядку.
Пункт «Refactor This» (Ctrl+Alt+Shift+T)
Данный пункт используется для быстрого доступа к списку доступных способов рефакторинга. Заметьте, список зависит от места, где вы его вызываете. Здесь и далее в коде указывает на место каретки в коде, при вызове.
Рис. 2. «Refactor This» для имени функции
Рис. 3. «Refactor This» для аргументов функции
Пункт «Rename» (Shift+F6)
Рис. 4. Переименование метода Использованный код
Рис. 5. Переименование переменной Использованный код
Переименование вложенного класса
Рис. 6. Переименование вложенного класса Использованный код
Рис. 7. Переименование класса Использованный код
Рис. 8. Переименование пакета Использованный код
Пункт «Rename File»
Переименовывает файл и ссылки на этот файл. В принципе можно вызывать через Shift+F6 если выделен файл. В диалоговом окне можно указать область поиска для переименований (Scope), искать ли ссылки или в комментариях и строчках
Рис. 9. Пример использования «Rename File» Использованный код
Пункт «Change Signature» (Ctrl+F6)
У Фаулера этому посвящена глава “Change Function Declaration”. В новой версии IDEA «Change Signature» был немного доработан. Я знаю два пути:
Пример для первого способа (через изменения сигнатуры метода)
Изменяем сигнатуру метода. В этот момент слева появляется «R» и в контекстном меню появляется пункт «Update usages to reflect signature change», который позволяет обновить все использования метода.
Рис. 10. Пример использования «Update usages to reflect signature change» Использованный код
Пример для второго способа (через диалоговое окно)
В диалоговом окне можно изменить состав переменных, exception, и даже сгенерировать переопределенный метод.
Рис. 11. Пример использования «Change Signature»
Пункт «Edit Property Value» (Alt + F6)
На данный момент (Idea 2020.2) экспериментальная функция и по умолчанию не включена. Включить можно параметром property.value.inplace.editing=true Поэтому примеры не привожу.
Пункт «Type Migration» (Ctrl + Shift + F6)
Позволяет изменить тип переменной, включая сигнатуры методов, возвращаемый тип переменной.
Рис. 12. Пример использования «Type Migration» Использованный код
Пункт «Make Static» (Ctrl + Shift + F6)
Позволяет сконвертировать метод или внутренний класс в статический. (Противоположность Convert To Instance Method)
Рис. 13. Пример использования «Make Static» Использованный код
Пункт «Convert To Instance Method»
Позволяет сконвертировать статический метод в нестатический (противоположность ”Make Static”). При этом можно указать к какому классу будет относится новый метод.
Рис. 14. Пример использования «Convert To Instance Method» Использованный код
Пункт «Move Classes» (F6)
В принципе делает, что и написано, перемещает классы.
Рис. 15. Пример использования «Move Classes» Использованный код
Пункт «Copy Classes» (F5)
Многие программисты любят копировать файлы, а не начинать с чистого листа. Для этого прекрасно подходит F5. Меняем название на нужноe, указываем пакет и готово.
Рис. 16. Пример использования «Copy Classes»
Пункт «Safe Delete» (Alt+Delete)
Рис. 17. Пример использования «Safe Delete»
Пункт «Extract/Introduce»
Рис. 18. Список доступных способов рефакторинга «Extract/Introduce»
Пункт «Variable» (Ctrl+Alt+V)
Создает новую переменную из выделенного фрагмента. (Этому способу у Фаулера посвящена глава “Extract Variable”).
Variable»» title=» Рис. 19. Пример использования «Extract/Introduce->Variable»» height=»395″ data-src=»https://habrastorage.org/getpro/habr/upload_files/229/bbe/e36/229bbee36d800fff7af6f54f54669962.gif» data-width=»770″/> Рис. 19. Пример использования «Extract/Introduce->Variable» Использованный код
Пункт «Constant» (Ctrl+Alt+C)
Создает новую константу из выделенного фрагмента.
Constant»» title=» Рис. 20. Пример использования «Extract/Introduce->Constant»» height=»395″ data-src=»https://habrastorage.org/getpro/habr/upload_files/ad5/c0d/613/ad5c0d6136d7be1e264f6a5a762fa838.gif» data-width=»770″/> Рис. 20. Пример использования «Extract/Introduce->Constant» Использованный код
Пункт «Field» (Ctrl+Alt+F)
Создает новое поле класса из выделенного фрагмента.
Field»» title=» Рис. 21. Пример использования «Extract/Introduce->Field»» height=»395″ data-src=»https://habrastorage.org/getpro/habr/upload_files/21b/98d/5bc/21b98d5bcf89d9dae9c57d7fe07bea4a.gif» data-width=»770″/> Рис. 21. Пример использования «Extract/Introduce->Field» Использованный код
Пункт «Parameter» (Ctrl+Alt+P)
Создает новый параметр (функции) из выделенного фрагмента.
Parameter»» title=»Рис. 22. Пример использования «Extract/Introduce->Parameter»» height=»395″ data-src=»https://habrastorage.org/getpro/habr/upload_files/7a4/ecd/354/7a4ecd354f89c7a6af76f79dd4e2157c.gif» data-width=»770″/> Рис. 22. Пример использования «Extract/Introduce->Parameter» Использованный код
Пункт «Functional Parameter»
Очень похож на пункт «Parameter», но теперь в функцию мы передаем или java.util.function.Supplier, или javafx.util.Builder. Обратите внимание, данный рефакторинг может привести к нежелательным эффектам.
Functional Parameter»» title=»Рис. 23. Пример использования «Extract/Introduce->Functional Parameter»» height=»395″ data-src=»https://habrastorage.org/getpro/habr/upload_files/8da/c89/c80/8dac89c8095cf4a3d9a0eb2a42eaa165.gif» data-width=»890″/> Рис. 23. Пример использования «Extract/Introduce->Functional Parameter» Использованный код
Пункт «Functional Variable»
Очень похож на пункт «Variable», но теперь мы получаем или java.util.function.Supplier или javafx.util.Builder.
Functional Variable» » title=» Рис. 24. Пример использования «Extract/Introduce->Functional Variable» » height=»496″ data-src=»https://habrastorage.org/getpro/habr/upload_files/07c/733/b78/07c733b783b867048e6bb6eaab7def51.gif» data-width=»890″/> Рис. 24. Пример использования «Extract/Introduce->Functional Variable»
Пункт «Parameter Object»
Удобный способ, когда в функцию передается много аргументов и вам надо обернуть их в класс. (У Фаулера это глава “Introduce Parameter Object”).
Parameter Object» » title=»Рис. 25. Пример использования «Extract/Introduce->Parameter Object» » height=»948″ data-src=»https://habrastorage.org/getpro/habr/upload_files/15d/300/524/15d300524ee01e430bbc3d959fc0bab5.gif» data-width=»890″/> Рис. 25. Пример использования «Extract/Introduce->Parameter Object» Использованный код
Пункт «Method» (Ctrl+Alt+M)
Method» » title=» Рис. 26. Пример использования «Extract/Introduce->Method» » height=»508″ data-src=»https://habrastorage.org/getpro/habr/upload_files/831/2ec/cc4/8312eccc4a4b1545b556781bcfd11a58.gif» data-width=»890″/> Рис. 26. Пример использования «Extract/Introduce->Method» Использованный код
Пункт «Type Parameter»
Рефакторинг из мира Kotlin, и для Java не применим (буду рад добавить, если кто-то сделает пример).
Пункт «Replace Method With Method Object»
Оборачивает выделенный фрагмент в объект. Может использоваться, если надо вернуть несколько объектов из метода (возвращает объект-обертку).
Replace Method With Method Object» » title=»Рис. 27. Пример использования «Extract/Introduce->Replace Method With Method Object» » height=»751″ data-src=»https://habrastorage.org/webt/fu/ae/ty/fuaetyf0d9wkdf_eeq0w0lpctma.gif» data-width=»953″/> Рис. 27. Пример использования «Extract/Introduce->Replace Method With Method Object» Использованный код
Пункт «Delegate»
Позволяет извлечь методы и поля в отдельный класс.
Delegate» » title=» Рис. 28. Пример использования «Extract/Introduce->Delegate» » height=»578″ data-src=»https://habrastorage.org/getpro/habr/upload_files/3e3/caf/a42/3e3cafa42da66c70bdbde562e46a1457.gif» data-width=»745″/> Рис. 28. Пример использования «Extract/Introduce->Delegate» Использованный код
Пункт «Interface»
Для заданного класса и его методов создает интерфейс. (Особенно удобно, когда при работе со Spring, когда кто-то забыл для компонента создать соответствующий интерфейс)
Interface» » title=» Рис. 29. Пример использования «Extract/Introduce->Interface» » height=»578″ data-src=»https://habrastorage.org/getpro/habr/upload_files/f64/52a/1f7/f6452a1f74ae6ef704fe74f3a255eedd.gif» data-width=»745″/> Рис. 29. Пример использования «Extract/Introduce->Interface» Использованный код
Пункт «Superclass»
Аналогично пункту «Interface», только теперь создается класс-родитель (Superclass). Фаулер описывает этот способ рефакторинга в главе “Extract Superclass”.
Superclass» » title=»Рис. 30. Пример использования «Extract/Introduce->Superclass» » height=»578″ data-src=»https://habrastorage.org/getpro/habr/upload_files/f2c/e8b/5e7/f2ce8b5e70c1ac7cfdcf57f1702b0102.gif» data-width=»745″/> Рис. 30. Пример использования «Extract/Introduce->Superclass» Использованный код
Пункт «Subquery as CTE»
Пункт «RSpec ‘let’»
Пункт «Inline»
Возможно один из самых крутых методов рефакторинга, Инлайнить можно почти все. Фаулер описывает этот способ рефакторинга в главах “Inline Class”, “Inline Function”, “Inline Variable”.
Рис. 31. Пример использования пункта «Inline» Использованный код
Пункт «Find and Replace code duplicate»
Ищет похожие фрагменты кода и предлагает заменить их, например, вызовом метода или константой.
Рис. 32. Пример использования пункта «Find and Replace code duplicate»
Пункт «Invert Boolean»
Позволяет инвертировать булевые переменные.
Рис. 33. Пример использования пункта «Invert Boolean» Использованный код
Пункт «Pull Member Up»
Позволяет перемещать методы или поля по иерархии вверх. Зачем это нужно написано у Фаулера в главах “Pull Up Field” и “Pull Up Method”. Выполняет обратную задачу пункта «Pull Member Down».
Рис. 34. Пример использования пункта «Pull Member Up» Использованный код
Пункт «Pull Member Down»
Рис. 35. Пример использования пункта «Pull Member Down» Использованный код
Пункт «Push ITds In»
Используется при работе с AsperctJ.
Рис. 36. Пример использования пункта «Push ITds In» Использованный код
Пункт «Use Interface Where Possible»
IDEA старается заменить, где это возможно, указания классов на указание интерфейсов.
Рис. 37. Пример использования пункта «Use Interface Where Possible» Использованный код
Пункт «Replace Inheritance with Delegation»
Заменяет наследование делегированием. У Фаулера про это главы “Replace Subclass with Delegate” и “Replace Superclass with Delegate”.
Рис. 38. Пример использования пункта «Replace Inheritance with Delegation» Использованный код
Пункт «Remove Middleman»
Рис. 39. Пример использования пункта «Remove Middleman»
Пункт «Wrap Method Return Value»
Оборачивает возвращаемое значение в объект-обертку. Удобно, когда нужно возвращать несколько связанных значений.
Рис. 40. Пример использования пункта «Wrap Method Return Value»
Пункт «Encapsulate Field»
Скрывает поле за getter, setter.
Рис. 41. Пример использования пункта «Encapsulate Field» Использованный код
Пункт «Replace Temp with Query»
с помощью этого способа рефакторинга вы можете заменить использование size на использование метода getActualSize(). Это приведет к увеличению количества вызовов методов, но в некоторых случаях может оказаться полезным. Пример так же показывает возможность извлечения метода с одновременным его дальнейшим использованием.
Рис. 42. Пример использования пункта «Replace Temp with Query»
Пункт «Replace Constructor with Factory Method»
Генерирует фабричный метод для указанного конструктора. Идеально, если у вас нет Lombok. (У Фаулера этому посвящена глава “Replace Constructor with Factory Function”).
Рис. 43. Пример использования пункта «Replace constructor with factory method» Использованный код
Пункт «Replace Constructor with Builder»
Генерирует builder для указанного конструктора. Идеально, если у вас нет Lombok.
Рис. 44. Пример использования пункта «Replace Constructor with Builder» Использованный код
Пункт «Generify»
Пытается код с raw-типами превратить в код с Generic-типами. Актуален при миграции с java версий ранее 1.5 на современные версии.
Рис. 45. Пример использования пункта «Generify» Использованный код
Пункт «Migrate»
Предоставляет готовые миграции для следующего списка:
Рис. 46. Список доступных миграций пункта «Migrate»
Пункт «Lombok» и «Delombok»
Предоставляются плагином “Lombok”. Недавно было объявлено, что теперь он будет входить в стандартную поставку IDEA. Используется при работе с библиотекой кодогенерации “Lombok”.
Пункт «Internationalize»
Используется для интернационализации. К сожалению, в справке не нашел на данный момент информации. IDEA сейчас активно локализуется на другие языки, скорее всего для этого был разработан этот метод.
Список источников
Прекрасный доклад про атомарный рефакторинг от Тагира Валеева