Logotipo do ConstructiCat
CodeBust.
Explorar a seção ▾

Decompor Condicional.

Problema

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

Solução

Decomponha as partes complicadas da condicional em métodos separados: a condição, o then e o else.

##Exemplo

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

##Por que refatorar

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.

##Benefícios

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

##Como refatorar

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

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