Decompor Condicional.
Você tem uma condicional complexa (if-then/else ou switch).
Decomponha as partes complicadas da condicional em métodos separados: a condição, o then e o else.
##Example
if (date.before(SUMMER_START) || date.after(SUMMER_END)) {
charge = quantity * winterRate + winterServiceCharge;
}
else {
charge = quantity * summerRate;
}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
thenfaz, esquece qual era a condição relevante. -
Enquanto você está ocupado analisando o
else, esquece o que o código nothenfaz.
##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
-
Extraia a condicional para um método separado via Extrair Método.
-
Repita o processo para os blocos
theneelse.