Видалення присвоювань параметрам
Проблема
Параметру методу присвоюється якесь значення.
Рішення
Замість параметра скористайтеся новою локальною змінною.
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;
}
// ...
}
Причини рефакторингу
Причини проведення цього рефакторингу такі ж, як і при розщеплюванні змінної, але в даному випадку йдеться про параметр, а не про локальну змінну.
По-перше, якщо параметр передається за посиланням, то після зміни його значення всередині методу, воно передається аргументу, який подавався на виклик цього методу. Дуже часто це відбувається випадково і призводить до сумних наслідків. Навіть якщо у вашій мові програмування параметри зазвичай передаються за значенням, а не за посиланням, сам код може викликати складнощі в тих, хто звик вважати інакше.
По-друге, багаторазові присвоєння різних значень параметру призводять до того, що вам стає складно зрозуміти, які саме дані повинні знаходитися в параметрі в певний момент часу. Проблема посилюється, якщо ваш параметр і те, що він повинен зберігати, описані в документації, але фактично його значення може не співпадати з очікуваним усередині методу.
Переваги
-
Кожен елемент програми повинен відповідати тільки за одну річ. Це значно спрощує підтримку коду в майбутньому, оскільки ви можете спокійно замінити цей елемент, не побоюючись побічних ефектів.
-
Цей рефакторинг допомагає в подальшому виділити ділянки коду, що повторюються, в окремі методи.
Порядок рефакторингу
-
Створіть локальну змінну і присвойте їй початкове значення вашого параметру.
-
В усьому коді методу після цього рядка замініть використання параметра вашою локальною змінною.