Также известен как Split Temporary Variable

Рефакторинг Расщепление переменной

Проблема

У вас есть локальная переменная, которая используется для хранения разных промежуточных значений внутри метода (за исключением переменных циклов).

Решение

Используйте разные переменные для разных значений. Каждая переменная должна отвечать только за одну определённую вещь.
До
double temp = 2 * (height + width);
System.out.println(temp);
temp = height * width;
System.out.println(temp);
После
final double perimeter = 2 * (height + width);
System.out.println(perimeter);
final double area = height * width;
System.out.println(area);
До
double temp = 2 * (height + width);
Console.WriteLine(temp);
temp = height * width;
Console.WriteLine(temp);
После
readonly double perimeter = 2 * (height + width);
Console.WriteLine(perimeter);
readonly double area = height * width;
Console.WriteLine(area);
До
$temp = 2 * ($this->height + $this->width);
print($temp);
$temp = $this->height * $this->width;
print($temp);
После
$perimeter = 2 * ($this->height + $this->width);
print($perimeter);
$area = $this->height * $this->width;
print($area);
До
temp = 2 * (height + width)
print(temp)
temp = height * width
print(temp)
После
perimeter = 2 * (height + width)
print(perimeter);
area = height * width
print(area)

Причины рефакторинга

Если вы «экономите» переменные внутри функции, повторно используете их для различных несвязанных целей, у вас обязательно начнутся проблемы в тот момент, когда потребуется внести какие-то изменения в код, содержащий эти переменные. Вам придётся перепроверять все случаи использования переменной, чтобы удостовериться в отсутствии ошибки в коде.

Достоинства

  • Каждый элемент программы должен отвечать только за одну вещь. Это сильно упрощает поддержку кода в будущем, т.к. вы можете спокойно заменить этот элемент, не опасаясь побочных эффектов.

  • Улучшается читабельность кода. Если переменная создавалась очень давно, да еще и в спешке, она могла получить элементарное название, которое не объясняет сути хранимого значения, например, k, a2, value и т.д. У вас есть шанс исправить ситуацию, назначив новым переменным хорошие названия, отражающие суть хранимых значений. Например, customerTaxValue, cityUnemploymentRate, clientSalutationString и т.д.

  • Этот рефакторинг помогает в дальнейшем выделить повторяющиеся участки кода в отдельные методы.

Порядок рефакторинга

  1. Найдите место в коде, где переменная в первый раз заполняется каким-то значением. В этом месте переименуйте ее, причем новое название должно соответствовать присваиваемому значению.

  2. Подставьте её новое название вместо старого в тех местах, где использовалось это значение переменной.

  3. Повторите операцию для случаев, где переменной присваивается новое значение.

Устали читать?

Сбегайте за подушкой, у нас тут контента на 7 часов чтения.

Или попробуйте наш новый интерактивный курс по рефакторингу. Он более информативный и гораздо более интересный, чем банальный текст.

Узнать больше...

Живой пример

Первый раз здесь? Ничего страшного!

У нас здесь всё просто – интерактивный пример очень похож на видео (но выглядит гораздо круче).

  1. После начала проигрывания, вам показываются разнообразные подсказки и сообщения. Вы продвигаетесь дальше, кликая на них.
  2. Вы можете перематывать шаги, используя стрелки слева.
  3. Кроме того, вы можете посмотреть разницу между первоначальным и получившимся кодом, нажав кнопку с глазом ().
  4. Кнопка компиляции () позвоялет проверить текущий код на наличие ошибок.