En programmation et en algorithmique, de nombreuses erreurs ou incompréhensions ne viennent pas de la complexité du code, mais de sa lisibilité et de sa maintenabilité. Parmi les mauvaises pratiques les plus courantes figure l’utilisation de nombres magiques.
En programmation et en algorithmique, de nombreuses erreurs ou incompréhensions ne viennent pas de la complexité du code, mais de sa lisibilité et de sa maintenabilité.
Parmi les mauvaises pratiques les plus courantes figure l’utilisation de nombres magiques.
Un nombre magique est une valeur numérique écrite directement dans le code sans explication claire de sa signification.
if score >= 42:
print("Niveau suivant")
À la lecture, rien n’indique pourquoi 42 est utilisé. Ce nombre a un sens fonctionnel, mais ce sens est implicite, donc fragile.
Les nombres magiques posent plusieurs problèmes concrets :
Lisibilité réduite Le code ne s’explique plus de lui-même. Le lecteur doit deviner l’intention.
Maintenance difficile Si la valeur doit changer, il faut la retrouver partout dans le code, avec un risque d’oubli.
Risque d’erreurs Modifier un nombre à un endroit et pas à un autre peut introduire des bugs subtils.
Couplage fort à une règle métier La logique métier est disséminée dans le code au lieu d’être centralisée.
La solution consiste à remplacer les nombres magiques par des constantes explicites.
SCORE_MINIMUM_NIVEAU_SUIVANT = 42
if score >= SCORE_MINIMUM_NIVEAU_SUIVANT:
print("Niveau suivant")
Avantages immédiats :
TEMPS_MAX_ATTENTE = 30
tant que temps < TEMPS_MAX_ATTENTE
attendre 1 seconde
fin tant que
Ici, la valeur 30 n’est plus arbitraire : elle représente clairement une contrainte fonctionnelle.
100, 255, 1024)60, 1000, 30)0.8, 50, 18)8, 16, 32)1, 2, -1)Dès qu’un nombre a un sens métier ou logique, il mérite un nom.
Un bon code ne cherche pas seulement à fonctionner, il cherche à être lu, compris et modifié.
Éliminer les nombres magiques est une règle simple qui améliore immédiatement la qualité du code, quel que soit le langage utilisé.