ConstructiCat Logo
CodeBust.
Browse section ▾

Remplacer une exception par un test.

Problem

Vous levez une exception là où un simple test ferait l'affaire ?

Solution

Remplacez l'exception par un test conditionnel.

##Example

Before
double getValueForPeriod(int periodNumber) {
  try {
    return values[periodNumber];
  } catch (ArrayIndexOutOfBoundsException e) {
    return 0;
  }
}
After
double getValueForPeriod(int periodNumber) {
  if (periodNumber >= values.length) {
    return 0;
  }
  return values[periodNumber];
}

##Why Refactor

Les exceptions doivent servir à gérer un comportement irrégulier lié à une erreur inattendue. Elles ne doivent pas remplacer un test. Si une exception peut être évitée en vérifiant simplement une condition avant l'exécution, alors faites-le. Les exceptions doivent être réservées aux véritables erreurs.

Par exemple, vous êtes entré dans un champ de mines et y avez déclenché une mine, provoquant une exception ; l'exception a été gérée avec succès et vous avez été projeté dans les airs jusqu'à un endroit sûr au-delà du champ de mines. Mais vous auriez pu éviter tout cela en lisant simplement le panneau d'avertissement placé à l'entrée du champ de mines.

##Benefits

  • Une simple condition peut parfois être plus évidente que du code de gestion d'exceptions.

##How to Refactor

  1. Créez une condition pour le cas limite et placez-la avant le bloc try/catch.

  2. Déplacez le code de la section catch à l'intérieur de cette condition.

  3. Dans la section catch, placez le code qui lève une exception habituelle anonyme et lancez tous les tests.

  4. Si aucune exception n'a été levée pendant les tests, débarrassez-vous de l'instruction try/catch.