ConstructiCat Logo
CodeBust.
Browse section ▾

Descomponer Condicional.

Problem

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

Solution

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

##Example

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

##Why Refactor

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.

##Benefits

  • 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.

##How to Refactor

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

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