Удаление присваиваний параметрам
Проблема
Параметру метода присваивается какое-то значение.
Решение
Вместо параметра воспользуйтесь новой локальной переменной.
int discount(int inputVal, int quantity) {
if (quantity > 50) {
inputVal -= 2;
}
// ...
}
int discount(int inputVal, int quantity) {
int result = inputVal;
if (quantity > 50) {
result -= 2;
}
// ...
}
int Discount(int inputVal, int quantity)
{
if (quantity > 50)
{
inputVal -= 2;
}
// ...
}
int Discount(int inputVal, int quantity)
{
int result = inputVal;
if (quantity > 50)
{
result -= 2;
}
// ...
}
function discount($inputVal, $quantity) {
if ($quantity > 50) {
$inputVal -= 2;
}
...
function discount($inputVal, $quantity) {
$result = $inputVal;
if ($quantity > 50) {
$result -= 2;
}
...
def discount(inputVal, quantity):
if quantity > 50:
inputVal -= 2
# ...
def discount(inputVal, quantity):
result = inputVal
if quantity > 50:
result -= 2
# ...
discount(inputVal: number, quantity: number): number {
if (quantity > 50) {
inputVal -= 2;
}
// ...
}
discount(inputVal: number, quantity: number): number {
let result = inputVal;
if (quantity > 50) {
result -= 2;
}
// ...
}
Причины рефакторинга
Причины проведения этого рефакторинга такие же, как и при расщеплении переменной, но в данном случае речь идёт о параметре, а не о локальной переменной.
Во-первых, если параметр передаётся по ссылке, то после изменения его значения внутри метода, оно передается аргументу, который подавался на вызов этого метода. Очень часто это происходит случайно и приводит к печальным последствиям. Даже если в вашем языке программирования параметры обычно передаются по значению, а не по ссылке, сам код может вызвать замешательство у тех, кто привык считать иначе.
Во-вторых, множественные присваивания разных значений параметру приводят к тому, что вам становится сложно понять, какие именно данные должны находиться в параметре в определенный момент времени. Проблема усугубляется, если ваш параметр и то, что он должен хранить, описаны в документации, но фактически, его значение может не совпадать с ожидаемым внутри метода.
Достоинства
-
Каждый элемент программы должен отвечать только за одну вещь. Это сильно упрощает поддержку кода в будущем, так как вы можете спокойно заменить этот элемент, не опасаясь побочных эффектов.
-
Этот рефакторинг помогает в дальнейшем выделить повторяющиеся участки кода в отдельные методы.
Порядок рефакторинга
-
Создайте локальную переменную и присвойте ей начальное значение вашего параметра.
-
Во всем коде метода после этой строки замените использование параметра вашей локальной переменной.