ConstructiCat Logo
CodeBust.
Browse section ▾

Decompor Condicional.

Problem

Você tem uma condicional complexa (if-then/else ou switch).

Solution

Decomponha as partes complicadas da condicional em métodos separados: a condição, o then e o 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

Quanto mais longo é um trecho de código, mais difícil ele é de entender. As coisas ficam ainda mais difíceis de entender quando o código está cheio de condições:

  • Enquanto você está ocupado descobrindo o que o código no bloco then faz, esquece qual era a condição relevante.

  • Enquanto você está ocupado analisando o else, esquece o que o código no then faz.

##Benefits

  • Ao extrair o código condicional para métodos com nomes claros, você facilita a vida de quem for manter o código mais tarde (como você mesmo, daqui a dois meses!).

  • Essa técnica de refatoração também é aplicável a expressões curtas em condições. A string isSalaryDay() é muito mais bonita e descritiva do que código para comparar datas.

##How to Refactor

  1. Extraia a condicional para um método separado via Extrair Método.

  2. Repita o processo para os blocos then e else.