Logotipo de ConstructiCat
CodeBust.
Explorar la sección ▾

Descomponer Condicional.

Problema

Tienes un condicional complejo (if-then/else o switch).

Solución

Descompón las partes complicadas del condicional en métodos separados: la condición, then y else.

##Ejemplo

Antes
if (date.before(SUMMER_START) || date.after(SUMMER_END)) {
  charge = quantity * winterRate + winterServiceCharge;
}
else {
  charge = quantity * summerRate;
}
Después
if (isSummer(date)) {
  charge = summerCharge(quantity);
}
else {
  charge = winterCharge(quantity);
}

##Por qué refactorizar

Cuanto más largo es un fragmento de código, más difícil es de entender. Las cosas se vuelven aún más difíciles de entender cuando el código está lleno de condiciones:

  • Mientras estás ocupado averiguando qué hace el código del bloque then, olvidas cuál era la condición correspondiente.

  • Mientras estás ocupado analizando el else, olvidas qué hace el código del then.

##Ventajas

  • Al extraer el código condicional a métodos con nombres claros, le facilitas la vida a quien mantenga el código más adelante (¡como tú mismo, dentro de dos meses!).

  • Esta técnica de refactorización también es aplicable a expresiones cortas en las condiciones. La cadena isSalaryDay() es mucho más bonita y descriptiva que el código para comparar fechas.

##Cómo refactorizar

  1. Extrae el condicional a un método separado mediante Extraer Método.

  2. Repite el proceso para los bloques then y else.