Источник: Nuances of Programming
Более 60% своего рабочего времени программисты занимаются рефакторингом кода. В связи с этим каждый уважающий себя специалист должен научиться делать это профессионально. Ведь качественно выполненный рефакторинг таит в себе столько преимуществ:
- изначально создается более чистый и безопасный код;
- появляется возможность упрощения базы кода;
- улучшается ее тестируемость;
- эффективнее проводятся ревью кода, поскольку известен предмет поиска.
В рамках этой статьи я поделюсь рядом приемов рефакторинга кода с помощью Xcode.
1. Переименование из контекстного меню
Правильный подбор имени для типов, переменных и методов делает базу кода намного понятнее. При выборе неудачного имени может возникнуть необходимость его изменить и обновить все места в базе, где используется этот элемент. Xcode помогает справиться с этой задачей за раз.
Для активации данной возможности нажимаем правой кнопкой мыши на элемент кода в месте его определения. После открытия контекстного меню выбираем сначала Refactor, а затем Rename.
Xcode быстро найдет все места с указанным элементом, после чего предоставит возможность редактирования в выделенном макете. Изменение имени элемента приведет к обновлению всех участков кода, где он встречается.
Этот способ подходит не только для переменных! Он также приемлем для рефакторинга types, enum и имен function. Примечательно, что в случае с функциями можно переименовывать имена и метки параметров.
Отметим, что данный прием требует внимательного отношения. Xcode может начать углубленный поиск в другие модули, а также распространить его на документацию. Поэтому перед изменением элемента просмотрите все участки вызовов и отмените выбор тех, что не подлежат обновлениям.
2. Генерация почленного инициализатора
При работе с модулями, SDK и библиотеками мы не можем всецело полагаться на автоматический синтез инициализаторов. В большинстве случаев приходится создавать публичные инициализаторы и обрекать себя на рутину по копированию и вставке всех свойств struct. К счастью, Xcode располагает полезной функциональностью для автоматической генерации почленных инициализаторов (memberwise initializer).
Для ее применения нажимаем правой кнопкой мыши на тип, требующий init, затем выбираем Refactor и Generate Memberwise Initializer.
Xcode создает инициализатор прямо под объявлением типа с ключевым словом internal. Можно изменить ключевое слово на public (или на нужное значение), а затем вырезать и вставлять где угодно.
3. Расширение случаев Switch
При использовании большого количества enums со множеством случаев и сложными ассоциированными значениями Xcode требуется время для понимания того, что мы пишем switch и стремимся к явному развертыванию всех этих случаев.
Здесь мы можем немного посодействовать и открыто проинструктировать IDE заполнить все недостающие случаи. Для активации этой функциональности сначала пишем синтаксис для инструкции switch. Далее нажимаем правой кнопкой мыши на switch, выбираем Refactor и в самом конце списка элементов находим Expand Switch Cases.
4. Многострочное редактирование
В ряде случаев требуется написать одну и ту же строку кода и применить ее к разным элементам.
К типичным примерам относятся view.addSubview в UIView или установка свойства translatesAutoresizingMaskIntoConstraints в значение false для группы элементов.
Конечно, можно прибегнуть к вспомогательным средствам или Mirror API для автоматического выполнения данной процедуры. Однако зачастую проще и вполне приемлемо воспользоваться многострочным редактированием для быстрого ввода подобных строк.
Существуют два способа активации данной функциональности:
- Удерживая control+shift ( ⌃+⇧ ) и нажимая стрелку вверх или вниз.
- Выбрав несколько строк кода и последовательно нажимая на Editor, Selection и Split Selection By Lines.
Как только мы это сделали, можно приступать к вводу символов, которые будут добавляться в каждую строку с курсором.
5. Быстрый поиск всех мест вызова функции
Хоть этот прием и не относится к рефакторингу, но я просто не могу о нем не упомянуть. При работе с большими базами кода может понадобиться информация обо всех местах, где применяется функция или переменная.
Xcode содействует в проведении такого поиска, задействуя команду Find, расположенную под Refactor в контекстном меню. Например, выделяем объявление функции, выбираем Find и затем Find Call Hierarchy для обнаружения всех участков кода, где вызывается функция.
Полученная в результате поиска иерархия вызовов позволяет увидеть не только все места использования искомого метода. Мы также можем пойти дальше, проверяя все методы второго уровня, которые задействуют метод, вызывающий искомый.
Таким образом создается своего рода статическая трассировка стека возможного вызова. Этот полезный инструмент позволяет:
- понять принцип работы базы кода;
- отследить ошибки или странное поведение, наблюдаемые в приложении.
Заключение
В данной статье были рассмотрены несколько способов ускоренного рефакторинга кода с помощью Xcode. Мы узнали, как:
- за один раз изменить имя множества элементов;
- автоматически создать почленный инициализатор;
- проинструктировать Xcode расширить все случаи switch;
- отредактировать сразу несколько строк;
- найти все участки кода, где применяется элемент.
Освоение данных приемов обязательно добавит вашей работе эффективности и продуктивности. Возможно, мастерства у нас от этого не прибавится, но зато жизнь и процесс разработки точно станут комфортнее.
Кроме того, такие знания говорят о стремлении лучше изучить среду разработки, что может впечатлить коллег по работе или даже интервьюеров, проверяющих ваши навыки программирования.
Читайте также:
Перевод статьи Riccardo Cipolleschi: 5 Xcode Tricks to Refactor Your Code