Magic number

Magic number

by Ghali Chraibi -
Number of replies: 0

Bonjour, 

J’ai reçu plusieurs questions sur les magic numbers (par exemple, « est-ce que blabla c’est considéré comme un magic number »), du coup je vais tenter de répondre collectivement et en profiter pour faire un petit rappel.


Un magic number, qu’est-ce que c’est ?

On appelle magic number, l’apparition brute d’informations (souvent des nombres pour ce projet) qui donnent l’impression de venir de nulle part, alors qu’ils ont en réalité un sens bien précis.


Pourquoi est-ce mal d’utiliser des magic numbers ?

Utiliser des magic numbers provoquent deux types de problèmes :

  • Un problème de compréhension : si je repasse sur mon code et que je vois ces nombres, je ne suis pas sûr de me rappeler à quoi ils servent (et imaginez la difficulté pour les personnes qui n’ont pas écris ce code ...).
  • Un problème de maintenance : si vous utilisez un même magic number à plusieurs endroits, mais que vous décidez de changer sa valeur à un moment donné, cela peut causer de très gros bugs si vous oubliez de changer la valeur de ce nombre à chaque endroit où vous l’utilisez.


Comment faire pour supprimer mes magic numbers ?

Très simple => définir des constantes avec des noms clairs. (Les macros sont bienvenues en C/C++)

Mauvais exemple de nom : « decalage »,  « erreur », « constante_mur »

Bon example de nom : « marge_voiture », « erreur_collision_joueur_obstacle »


Example typique : « est-ce que mettre + 1 est considéré comme un magic number » ?

Tout dépend du contexte.

Si votre +1 correspond à une marge ou autre constante concrète, il faut en faire une constante (peut être un jour vous voudrez doubler la marge).

Si cependant votre +1 correspond à l’incrementation d’une variable, cela n’est en général pas considéré comme un magic number, car cela n’a pas de représentation conceptuelle et on voudra rarement modifier le nombre d’incrementation.


J’espère que ce post éclaircira la question des magic numbers !