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

Рефакторинг Видалення привласнень параметрам

Проблема

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

Рішення

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

До
int discount(int inputVal, int quantity) {
  if (inputVal > 50) {
    inputVal -= 2;
  }
  //...
}
Після
int discount(int inputVal, int quantity) {
  int result = inputVal;
  if (inputVal > 50) {
    result -= 2;
  }
  //...
}
До
int Discount(int inputVal, int quantity) 
{
  if (inputVal > 50) 
  {
    inputVal -= 2;
  }
  //...
}
Після
int Discount(int inputVal, int quantity) 
{
  int result = inputVal;
  
  if (inputVal > 50) 
  {
    result -= 2;
  }
  //...
}
До
function discount($inputVal, $quantity) {
  if ($inputVal > 50)
    $inputVal -= 2;
  ...
Після
function discount($inputVal, $quantity) {
  $result = $inputVal;
  if ($inputVal > 50)
    $result -= 2;
  ...
До
def discount(inputVal, quantity):
    if inputVal > 50:
        inputVal -= 2
    #...
Після
def discount(inputVal, quantity):
    result = inputVal
    if inputVal > 50:
        result -= 2
    #...

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

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

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

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

Переваги

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

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

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

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

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

Замучились читати?

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

Або спробуйте наш новий інтерактивний курсу. Він набагато цікавіший за банальний тест.

Дізнатися більше...