ConstructiCat Logo
CodeBust.
Browse section ▾

Remplacer un nombre magique par une constante symbolique.

Problem

Votre code utilise un nombre qui a une certaine signification.

Solution

Remplacez ce nombre par une constante portant un nom lisible qui explique la signification du nombre.

##Example

Before
double potentialEnergy(double mass, double height) {
  return mass * height * 9.81;
}
After
static final double GRAVITATIONAL_CONSTANT = 9.81;

double potentialEnergy(double mass, double height) {
  return mass * height * GRAVITATIONAL_CONSTANT;
}

##Why Refactor

Un nombre magique est une valeur numérique que l'on rencontre dans le code source mais qui n'a pas de signification évidente. Cet « anti-modèle » rend plus difficile la compréhension du programme et la refactorisation du code.

Des difficultés supplémentaires surgissent encore lorsque vous devez modifier ce nombre magique. La fonction « rechercher et remplacer » ne fonctionnera pas pour cela : le même nombre peut être utilisé à des fins différentes à différents endroits, ce qui signifie que vous devrez vérifier chaque ligne de code qui utilise ce nombre.

##Benefits

  • La constante symbolique peut servir de documentation vivante de la signification de sa valeur.

  • Il est beaucoup plus facile de modifier la valeur d'une constante que de rechercher ce nombre dans toute la base de code, sans risquer de modifier accidentellement le même nombre utilisé ailleurs dans un autre but.

  • Réduit l'utilisation en double d'un nombre ou d'une chaîne dans le code. Ceci est particulièrement important lorsque la valeur est compliquée et longue (comme 3.14159 ou 0xCAFEBABE).

##How to Refactor

  1. Déclarez une constante et affectez-lui la valeur du nombre magique.

  2. Trouvez toutes les occurrences du nombre magique.

  3. Pour chacun des nombres que vous trouvez, vérifiez bien que le nombre magique correspond, dans ce cas précis, à l'objectif de la constante. Si oui, remplacez le nombre par votre constante. C'est une étape importante, car le même nombre peut signifier des choses absolument différentes (et être remplacé par des constantes différentes, selon le cas).