НОВОРІЧНИЙ РОЗПРОДАЖ!

Видалення присвоювань параметрам

Також відомий як: Remove Assignments to Parameters

Проблема

Параметру методу присвоюється якесь значення.

Рішення

Замість параметра скористайтеся новою локальною змінною.

До
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; } // ... }

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

Причини проведення цього рефакторингу такі ж, як і при розщеплюванні змінної, але в даному випадку йдеться про параметр, а не про локальну змінну.

По-перше, якщо параметр передається за посиланням, то після зміни його значення всередині методу, воно передається аргументу, який подавався на виклик цього методу. Дуже часто це відбувається випадково і призводить до сумних наслідків. Навіть якщо у вашій мові програмування параметри зазвичай передаються за значенням, а не за посиланням, сам код може викликати складнощі в тих, хто звик вважати інакше.

По-друге, багаторазові присвоєння різних значень параметру призводять до того, що вам стає складно зрозуміти, які саме дані повинні знаходитися в параметрі в певний момент часу. Проблема посилюється, якщо ваш параметр і те, що він повинен зберігати, описані в документації, але фактично його значення може не співпадати з очікуваним усередині методу.

Переваги

  • Кожен елемент програми повинен відповідати тільки за одну річ. Це значно спрощує підтримку коду в майбутньому, оскільки ви можете спокійно замінити цей елемент, не побоюючись побічних ефектів.

  • Цей рефакторинг допомагає в подальшому виділити ділянки коду, що повторюються, в окремі методи.

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

  1. Створіть локальну змінну і присвойте їй початкове значення вашого параметру.

  2. В усьому коді методу після цього рядка замініть використання параметра вашою локальною змінною.