ConstructiCat Logo
CodeBust.
Browse section ▾

Sustituir parámetro por llamada a método.

Problem

Llamas a un método de consulta y pasas sus resultados como parámetros de otro método, cuando ese método podría llamar a la consulta directamente.

Solution

En lugar de pasar el valor a través de un parámetro, intenta colocar una llamada a la consulta dentro del cuerpo del método.

##Example

Before
int basePrice = quantity * itemPrice;
double seasonDiscount = this.getSeasonalDiscount();
double fees = this.getFees();
double finalPrice = discountedPrice(basePrice, seasonDiscount, fees);
After
int basePrice = quantity * itemPrice;
double finalPrice = discountedPrice(basePrice);

##Why Refactor

Una larga lista de parámetros es difícil de entender. Además, las llamadas a esos métodos suelen parecerse a una serie de cascadas, con cálculos de valores sinuosos y vertiginosos por los que es difícil moverse y que, aun así, hay que pasar al método. Por eso, si el valor de un parámetro puede calcularse con ayuda de un método, hazlo dentro del propio método y deshazte del parámetro.

##Benefits

  • Nos deshacemos de parámetros innecesarios y simplificamos las llamadas a métodos. Esos parámetros a menudo no se crean para el proyecto tal como es ahora, sino pensando en necesidades futuras que quizá nunca lleguen.

##How to Refactor

  1. Asegúrate de que el código que obtiene el valor no use parámetros del método actual, ya que no estarán disponibles desde dentro de otro método. Si los usa, trasladar el código no es posible.

  2. Si el código en cuestión es más complicado que una sola llamada a un método o función, usa Extraer método para aislar ese código en un nuevo método y hacer que la llamada sea sencilla.

  3. En el código del método principal, sustituye todas las referencias al parámetro que se está reemplazando por llamadas al método que obtiene el valor.

  4. Usa Eliminar parámetro para eliminar el parámetro que ahora ya no se usa.