НОВОГОДНЯЯ РАСПРОДАЖА!

Расщепление переменной

Также известен как: 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);
echo $temp;
$temp = $this->height * $this->width;
echo $temp;
После
$perimeter = 2 * ($this->height + $this->width);
echo $perimeter;
$area = $this->height * $this->width;
echo $area;
До
temp = 2 * (height + width)
print(temp)
temp = height * width
print(temp)
После
perimeter = 2 * (height + width)
print(perimeter)
area = height * width
print(area)
До
let temp = 2 * (height + width);
console.log(temp);
temp = height * width;
console.log(temp);
После
const perimeter = 2 * (height + width);
console.log(perimeter);
const area = height * width;
console.log(area);

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

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

Достоинства

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

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

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

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

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

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

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