ConstructiCat Logo
CodeBust.
Browse section ▾

Eliminar Asignaciones a Parámetros.

Problem

Se asigna algún valor a un parámetro dentro del cuerpo del método.

Solution

Usa una variable local en lugar de un parámetro.

##Example

Before
int discount(int inputVal, int quantity) {
  if (quantity > 50) {
    inputVal -= 2;
  }
  // ...
}
After
int discount(int inputVal, int quantity) {
  int result = inputVal;
  if (quantity > 50) {
    result -= 2;
  }
  // ...
}

##Why Refactor

Las razones para esta refactorización son las mismas que para Dividir Variable Temporal, pero en este caso se trata de un parámetro, no de una variable local.

Primero, si un parámetro se pasa por referencia, entonces, después de cambiar el valor del parámetro dentro del método, ese valor se pasa al argumento que solicitó la llamada a este método. Muy a menudo esto ocurre de forma accidental y conduce a efectos desafortunados. Aunque los parámetros normalmente se pasen por valor (y no por referencia) en tu lenguaje de programación, esta peculiaridad de codificación puede desconcertar a quienes no están acostumbrados a ella.

Segundo, las múltiples asignaciones de valores distintos a un mismo parámetro te dificultan saber qué datos debería contener el parámetro en un momento concreto. El problema empeora si tu parámetro y su contenido están documentados pero el valor real puede diferir de lo que se espera dentro del método.

##Benefits

  • Cada elemento del programa debería ser responsable de una sola cosa. Esto facilita mucho el mantenimiento del código en el futuro, ya que puedes reemplazar código de forma segura sin efectos secundarios.

  • Esta refactorización ayuda a extraer código repetitivo a métodos separados.

##How to Refactor

  1. Crea una variable local y asígnale el valor inicial de tu parámetro.

  2. En todo el código del método que siga a esta línea, reemplaza el parámetro con tu nueva variable local.