Рефакторинг кода - это легко
Уменьшите сложность вашего кода, улучшите его читаемость и сделайте его расширяемым, не изменяя его внешнего поведения. Рефакторинг старого кода, кода, который вы унаследовали, или вашего начального варианта проекта.
Доступ к командам рефакторинга
Команды рефакторинга доступны в меню, с помощью клавиатуры и мыши, и содержание меню зависит от контекста. Рефакторинг доступен как в окнах инструментов Visual Assist, так и в текстовом редакторе для символов, выделенных частей и пробельных символов.
Откройте контекстное меню Quick Action and Refactoring для текущего символа с помощью сочетания клавиш по умолчанию Shift+Alt+Q.
![context aware refactoring menu](/Presentation/WholeTomato/Assets/Images/features/refactoring/contextAwareRefactoringMenu.png)
Получить полный список команд рефакторинга можно в контекстном меню текстового редактора.
![Obtain a complete list of refactoring commands in the context menu](/Presentation/WholeTomato/Assets/Images/features/refactoring/listOfRefactoringCommands.png)
Наведите курсор на символ и Visual Assist отобразит значок если рефакторинг доступен. Нажмите на значок, чтобы открыть контекстно-зависимые меню.
![Hover over a symbol and Visual Assist displays an icon when refactoring is available](/Presentation/WholeTomato/Assets/Images/features/refactoring/displayRefactoringMenu.png)
Изменение сигнатуры
Изменение сигнатуры метода из любой ссылки, реализации или объявления.
Обновите сигнатуру метода или функции в простом диалоговом окне, и Visual Assist выведет различия между исходной и новой сигнатурами. Переупорядочивайте, переименовывайте, добавляйте и удаляйте параметры с помощью этого мощного рефакторинга, который также обновляет все ссылки на ваш метод. При переименовании параметра ссылки на него в методе также переименовываются.
Измените любую или все следующие части сигнатуры:
- Имя метода
- Возвращаемый тип
- Видимость
- Имена параметров
- Типы параметров
- Порядок параметров
- Количество параметров
- Квалификаторы
Аналогично рефакторингу переименования, установите область изменения и предварительно просмотрите набор ссылок, которые будут подвергнут рефакторингу.
![x](/Presentation/WholeTomato/Assets/Images/features/refactoring/changeSignature.png)
Конвертировать указатель в экземпляр
Измените указатели объектов на ссылки на объекты и наоборот.
Быстро преобразуйте тип в объявлении, поменяв "." и "->" в ссылках, и отрегулируйте "*" и "&" по мере необходимости.
![Change object reference to object pointer](/Presentation/WholeTomato/Assets/Images/features/refactoring/convertInstanceToPointer.png)
Инкапсулировать поле - Encapsulate Field
Создание аксессоров к member field путем инкапсуляции этого поля.
Ограничьте действия над member field с помощью рефакторинга Инкапсулировать поле (Encapsulate Field). Аксессоры создаются и именуются автоматически, и ваше исходное поле остается нетронутым в том случае, если вам нужно скомпилировать устаревший код при обновлении ссылок. Если вы инкапсулируете новое поле, немедленно сделайте его private, чтобы ограничить будущий доступ.
![Create accessors to a member field by encapsulating the field](/Presentation/WholeTomato/Assets/Images/features/refactoring/encapsulateField.png)
В C/C++, аксессоры создаются рядом с объявлением в заголовочном файле и могут оставаться в заголовочном файле для inline- выполнения.
![In C/C++, accessor methods are created adjacent to a declaration in a header file](/Presentation/WholeTomato/Assets/Images/features/refactoring/accessorMethodsInHeader.png)
Если вы предпочитаете реализации в исходном файле, выполните Инкапсуляцию поля вместе с другим рефакторингом, чтобы переместить реализации в соответствующий исходный файл.
![Move the implementations to a corresponding source file](/Presentation/WholeTomato/Assets/Images/features/refactoring/moveImplementations.png)
Переместите сегмент кода в отдельный метод и замените его вызовом извлеченного метода.
Облегчите чтение длинных методов и совместное использование общих блоков кода с помощью рефакторинга Extract Method. Извлеките несколько строк или сегмент одной. Возвращаемое значение и параметры извлеченного метода будут определены и предложены вам.
![Move a segment of code into a separate method, and replace the segment with a call to the extracted method](/Presentation/WholeTomato/Assets/Images/features/refactoring/extractMethod.png)
В C/C++ этот рефакторинг создает встроенный метод в заголовочном файле или извлекает реализацию непосредственно в исходный код.
![In C/C++, the refactoring creates an inline method in a header file](/Presentation/WholeTomato/Assets/Images/features/refactoring/extractMethodDialog.png)
Ввести переменную -Introduce Variable
Замените выражение на переменную, объясняющую назначение заменяемого кода.
Introduce Variable определяет временную переменную в самой внутренней области выделения, инициализирует временную переменную замененным кодом и заменяет одно или несколько вхождений выражения временной переменной.
![Replace an expression with a variable that explains the purpose of the replaced code.](/Presentation/WholeTomato/Assets/Images/features/refactoring/introduceVariableMonthDialog.png)
В C/C++: легко перемещает реализацию метода из исходного кода в заголовочный файл или объявление класса.
Этот рефакторинг помещает реализации в заголовочные файлы для встроенного выполнения. Рефакторинг также перемещает реализацию метода в объявление класса рядом с другими методами того же класса. Определите формат реализаций с помощью VA Snippet.
![Move Implementation to Header File](/Presentation/WholeTomato/Assets/Images/features/refactoring/moveImplToClassMenu.png)
Перенести реализацию в файл исходного кода
В C/C++: переместите реализацию метода из заголовочного файла в файл исходного кода.
Этот рефакторинг часто инициируется после других рефакторингов, которые помещают реализации в заголовочные файлы для inline выполнения, например, Encapsulate Field. Рефакторинг создает объявление в заголовке и перемещает реализацию рядом с другими методами того же класса.
![Move Implementation to Source File](/Presentation/WholeTomato/Assets/Images/features/refactoring/moveImplementation.png)
Перемещение реализаций методов в файл исходного кода
В C/C++: переместите все реализации из заголовочного файла в файл исходного кода за одну операцию.
В дополнение к команде рефакторинга, которая перемещает одну реализацию, эта множественная версия перемещает все методы из заголовочного файла в класс. Вызовите команду из имени класса, а не из одного из его членов. Появится диалоговое окно, в котором можно выбрать реализации для перемещения.
![Move Method Implementations to Source File](/Presentation/WholeTomato/Assets/Images/features/refactoring/moveImplementationsDialog.png)
Переместить выделение в новый файл
Переместите код в новый файл заголовка или исходного кода и автоматически добавьте новый файл в активный проект.
Рефакторинг создает новый файл в том же каталоге, что и активный документ. Определите формат нового файла с помощью VA Snippet. В C/C++ Visual Assist может заменить выделение в активном документе на #include, если выделение перемещено в заголовочный файл.
![Move code to a new header file or source file](/Presentation/WholeTomato/Assets/Images/features/refactoring/moveSelection.png)
Переименование -Rename
Быстро и точно переименуйте символы в активном проекте и во всем решении.
Этот часто используемый рефакторинг переименовывает определение и объявление символа, все ссылки на него и, возможно, вхождения в комментарии и строки. Предварительный просмотр всех целей, подлежащих переименованию, всегда отображается, поэтому вы уверены, что переименование делает то, что вы ожидаете. Отмените выбор всех ссылок, которые вы хотите оставить нетронутыми, и отмените всю операцию, если вы допустите ошибку.
Переименование доступно для:
- Классов
- Enums
- Полей
- Макросов
- Методов
- Параметров метода
- Переменных
Выберите пункт Rename в любом меню рефакторинга, укажите новое имя и задайте параметры. Предварительный просмотр изменений различает вхождения, доступные только для чтения и для записи.
![Select Rename from any of the refactoring menus](/Presentation/WholeTomato/Assets/Images/features/refactoring/rename.png)
Переименование файлов - Rename Files
Переименуйте активный документ, не нарушая сборку.
Переименуйте активный документ и соответствующие ему файлы легко, не прерывая ваш поток работы и не нарушая сборку. Visual Assist автоматически обновляет файлы, проекты и решения, а затем распространяет переименование через системы управления версиями, интегрированные с Microsoft Visual Studio.
В C/C++ заголовочные файлы и файлы исходного кода переименовываются попарно, и переименование заголовочного файла автоматически обновляет все директивы #include которые включают этот заголовочный файл. В C# файлы дизайна и кода переименовываются одновременно.
![Rename your active document without breaking the build](/Presentation/WholeTomato/Assets/Images/features/refactoring/renameFiles.png)
Упрощение объявления экземпляра - Simplify Instance Declaration
Сделайте объявления объектов более понятными.
Исключите внешнюю настройку объекта на новый экземпляр его типа.
![Simplify an instance declaration](/Presentation/WholeTomato/Assets/Images/features/refactoring/simplifyMenu.png)
После вызова рефакторинга объект создается и инициализируется в более простом, но эквивалентном объявлении.
![Simplified instance declaration](/Presentation/WholeTomato/Assets/Images/features/refactoring/simplifyAfter.png)