Magic numbers

Re: Magic numbers / revoir aussi slides 12-13 classe inversée du topic2 sur moodle

by Ronan Boulic -
Number of replies: 0

Tout d'abord, je rappelle la définition du magic number dans nos conventions et les slides du cours:

Un magic number est un paramètre potentiel du problème; il pourrait changer lorsque le programme évolue. Un autre cas est celui du choix d’une approximation d’un nombre tel que Pi. Par contre une valeur numérique apparaissant dans des équations ou formules invariantes n’est PAS un magic number.

Ce terme de magic number est adopté par la communauté informatique au sens large depuis longtemps : il désigne une des mauvaises pratiques de programmation aussi appelée antipattern. Le cas qui nous concerne est celui des "constantes numériques non-nommées" qui est décrit en détail sur wikipedia ici:

Cet article wikipedia détaille aussi des usages acceptés comme constantes numériques non-nommées.
--------------------------------------------------------------------------------------------------------------------
Dans le cas que vous présentez, la question est de savoir si le 1 est un magic number ou pas. La question centrale à se poser à se poser est:
- est-ce un paramètre du problème ?

En d'autres termes "est-ce que je serais intéressé d'utiliser une variante de ce code avec une autre valeur que 1 et obtenir des résultats qui restent dans le cadre de ce problème ?"

Dans le cas de votre algorithme, utiliser une utre valeur que 1 n'aurait aucun sens car le résultat ne serait pas correct. Ce 1 est équivalent à la valeur numérique 4 apparaissant dans l'expression du discriminant du polynome du second degré (b*b - 4*a*c) : on n'a pas le droit de changer cette valeur ; c'est un invariant et on peut conserver ce 1 tel quel dans le code.