ConstructiCat Logo
CodeBust.
Browse section ▾

Décomposer une condition.

Problem

Vous avez une condition complexe (if-then/else ou switch).

Solution

Décomposez les parties compliquées de la condition en méthodes distinctes : la condition, le then et le 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

Plus un morceau de code est long, plus il est difficile à comprendre. Les choses deviennent encore plus difficiles à comprendre lorsque le code est rempli de conditions :

  • Pendant que vous cherchez à comprendre ce que fait le code du bloc then, vous oubliez quelle était la condition concernée.

  • Pendant que vous analysez le else, vous oubliez ce que fait le code du then.

##Benefits

  • En extrayant le code conditionnel vers des méthodes clairement nommées, vous facilitez la vie de la personne qui maintiendra le code plus tard (comme vous, dans deux mois !).

  • Cette technique de refactorisation s'applique aussi aux expressions courtes dans les conditions. La chaîne isSalaryDay() est bien plus jolie et descriptive que du code de comparaison de dates.

##How to Refactor

  1. Extrayez la condition dans une méthode distincte via Extraire une méthode.

  2. Répétez le processus pour les blocs then et else.