#рефакторинг #методы_рефакторинга ![[Pasted image 20250204082823.png]] ### **Проблема** У вас есть локальная переменная, которая используется для хранения разных промежуточных значений внутри метода (за исключением переменных циклов). ```typescript let temp = 2 * (height + width); console.log(temp); temp = height * width; console.log(temp); ``` ### **Решение** Используйте разные переменные для разных значений. Каждая переменная должна отвечать только за одну определённую вещь. ```typescript const perimeter = 2 * (height + width); console.log(perimeter); const area = height * width; console.log(area); ``` ### **Причины рефакторинга** Если вы «экономите» переменные внутри функции, повторно используете их для различных несвязанных целей, у вас обязательно начнутся проблемы в тот момент, когда потребуется внести какие-то изменения в код, содержащий эти переменные. Вам придётся перепроверять все случаи использования переменной, чтобы удостовериться в отсутствии ошибки в коде. ### **Достоинства** - Каждый элемент программы должен отвечать только за одну вещь. Это сильно упрощает поддержку кода в будущем, так как вы можете спокойно заменить этот элемент, не опасаясь побочных эффектов. - Улучшается читабельность кода. Если переменная создавалась очень давно, да еще и в спешке, она могла получить элементарное название, которое не объясняет сути хранимого значения, например, k, a2, value и т. д. У вас есть шанс исправить ситуацию, назначив новым переменным хорошие названия, отражающие суть хранимых значений. Например, `customerTaxValue`, `cityUnemploymentRate`, `clientSalutationString` и т. д. - Этот рефакторинг помогает в дальнейшем [[Извлечение функции (Extract Function)|выделить повторяющиеся участки кода в отдельные методы]]. ### **Порядок рефакторинга** 1. Найдите место в коде, где переменная в первый раз заполняется каким-то значением. В этом месте переименуйте ее, причем новое название должно соответствовать присваиваемому значению. 2. Подставьте её новое название вместо старого в тех местах, где использовалось это значение переменной. 3. Повторите операцию для случаев, где переменной присваивается новое значение ### **Обратный рефакторинг** - [[Встраивание переменной (Inline Variable)]] ### **Ссылки** - https://refactoring.guru/ru/split-temporary-variable - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]