Eclipse: самые полезные рефакторинги
Время от времени я использую функцию рефакторинга Eclipse. Некоторые методы более очевидны, чем другие, а некоторые я никогда не пробовал.
Какой рефакторинг наиболее полезен для вас и почему?
Примечание: я считаю эту презентацию очень полезной, возможно, потому, что она основана на примере, поэтому ее легко понять:
" Рефакторинг для всех - как и зачем использовать функции автоматического рефакторинга Eclipse"
Редактировать: Эта статья также полезна (спасибо джиттер)
13 ответов
Это интересный вопрос. Я знаю, что работает для меня, и интересно посмотреть, что используют другие.
Я решил использовать более научный подход для определения наиболее часто используемых команд рефакторинга. Eclipse имеет встроенную функцию сбора данных об использовании (UDC). Данные являются общедоступными. Я взял данные и извлек следующий график, который показывает наиболее часто используемые команды редактирования (без команд навигации).
http://img.skitch.com/20091207-bmcng36rjy837sqmcx58b85age.gif
Тем не менее, я твердо верю в "Сохранить действия" для форматирования и организации импорта (прочитайте мою статью об этом), поэтому я бы не стал их считать. Я бы тоже удалил комментирующие действия. Картинка выглядит так: http://img.skitch.com/20091207-ieas1mk5114fwitucqkqxyw6t.gif
Переименуйте - потому что написание значимых имен - лучший способ написания самодокументируемого кода. Shift+Alt+R
Извлечь метод - всякий раз, когда метод становится слишком длинным. Shift+Alt+M
Извлекайте константу - потому что магические числа плохие. Shift+Alt+T (рефакторинг меню, прямого ярлыка нет).
Встроенная / вводная переменная - чтобы убрать помехи из методов. Shift+Alt+I (встроенный), Shift+Alt+L (ввести)
Мои любимые (в порядке использования):
- Переименовать (
Alt-Shift-R
, или жеCtrl-1
для более быстрого переименования в файле)
Хорошее переименование переменных, методов и т. Д. без побочных эффектов. - Извлечь переменную (
Ctrl-1
,Alt-Shift-L
)
Подходит для разбиения строки быстрого набора из 100 символов на отдельные шаги. - Метод извлечения (
Alt-Shift-M
)
Создайте метод из некоторого кода без каких-либо побочных эффектов. - Разделенная декларация переменной (
Ctrl-1
)
Хорошо, когда вы инициализируете переменную в объявлении и теперь выясняете, что инициализация должна быть в блоке try или if. - Изменить метод Подпись (
Alt-Shift-C
)
Удобный швейцарский армейский нож для манипулирования сигнатурой метода, включая значения по умолчанию для новых параметров. - Pull Up / Push Down Pull методы и переменные к универсальному интерфейсу или суперклассу или толчок вниз к подклассу
- Извлечь интерфейс / суперкласс
Извлеките интерфейс или суперкласс из текущего класса. Очень кстати.
Мои любимые:
- Переименование
- Потяните вверх / нажмите вниз
- Метод извлечения
Самые популярные рефакторинги были заявлены, и я полностью с ними согласен.
Форматирование кода (Source, Format или Ctrl Shift F) является одной из функций IDE, которую я очень часто использую. Правда, это не рефакторинг, но он улучшает читабельность кода, сохраняя при этом ваш стиль кодирования: просто перейдите в Preferences, Java, Code Style, Formatter и сообщите Eclipse, как вы хотите, чтобы ваш код выглядел!
Создание геттеров и сеттеров - это также функция, которую я нахожу для экономии времени при написании Java-бинов.
Eclipse, возможно, имеет наименьшее количество рефакторингов для всех популярных IDE. Вы можете рассмотреть Netbeans или IntelliJ (версия для сообщества бесплатна). И наоборот, у Eclipse, возможно, лучший отладчик.;)
Я использую рефакторинг, когда пишу код (который, как я обнаружил, ускоряет написание примерно на 15%), поэтому способность IntelliJ реорганизовывать код, который не компилируется, очень полезна для меня. Другие IDE могут поддерживать это сейчас (кто-нибудь знает?) Я нахожу, что Smart Complete IntelliJ также немного умнее.
Я протестировал повторный набор файлов из распечатки (изначально написанной в Eclipse) и обнаружил, что при наборе файла с помощью IntelliJ (по сравнению с Eclipse) я использовал на 30% меньше клавиш и на 50% меньше движений мыши. По моим оценкам, Netbeans находится где-то посередине.
Мои любимые:
1) Переименовать - он работает с именами методов, именами переменных, именами классов, полями - на самом деле все, что с именем.
2) Преобразовать анонимный класс во вложенный - Помогает с отладкой, позволяет повторно использовать логику (например, компаратор), которую вы думали, что будете использовать только в одном месте.
3) Преобразовать тип члена в верхний уровень. Часто после превращения анонимного класса во вложенный класс я обнаруживаю, что этот класс полезен в других местах. Этот рефакторинг идеален тогда.
Мне нравится метод извлечения (Alt+Shift+M), и начиная с версии 3.6M1, он теперь обрабатывает выборки, содержащие операторы continue.
Чтобы сохранить семантику существующего кода, выбор должен включать в себя последний оператор цикла. В извлеченном методе операторы continue изменяются и возвращают:
Для выбора, который потребовал бы нескольких возвращаемых значений в извлеченном методе, Eclipse теперь перечисляет конфликтующие переменные в сообщении об ошибке:
Больше всего я использую переименование, извлечение метода и изменение метода подписи в указанном порядке.
Я использую:
1- Переименовать - чтобы лучше исправить имя метода
2- Переместить - чтобы упорядочить свой пакет лучше, например, когда я начинал свой проект, он был настолько мал, что пакет io не нужен, но теперь да.
3. Генерация комментариев. Когда я создаю.class, избегайте повторного копирования лицензии GPL и т. Д.
4- Правильный отступ - чтобы мой код читался.
Также стоит прочитать это исследование: как развивается API? История рефакторинга. Д. Диг и Р. Джонсон.
Авторы заметили, что 80% изменений были рефакторингами и классифицировали их. Вот тезисы:
Фреймворки и библиотеки меняют свои API. Перенос приложения на новый API утомителен и нарушает процесс разработки. Хотя для решения эволюции API были предложены некоторые инструменты и идеи, большинство обновлений выполняется вручную. Чтобы лучше понять требования к инструментам миграции, мы изучили изменения API четырех платформ и одной библиотеки. Мы обнаружили, что изменения, которые нарушают существующие приложения, не являются случайными, но имеют тенденцию делиться на определенные категории. Более 80% этих изменений являются рефакторингами. Это говорит о том, что для обновления приложений следует использовать инструменты миграции на основе рефакторинга.
"Стоит также прочитать это исследование: как развиваются API? История рефакторинга". Д. Диг и Р. Джонсон.
Авторы заметили, что 80% изменений были рефакторингами и классифицировали их. Вот реферат... "
Было обнаружено, что 80% BREAKING изменений являются рефакторингами. Сами рефакторинги составляли только 20 - 30% изменений API.