Magic numbers

Magic numbers

by Antonin Stampbach -
Number of replies: 3

Bonjour,

J'utilise dans mon programme à plusieurs reprises la commande : nom_tableau[0].size() pour obtenir nbC et m'éviter de passer nbC en argument dans la fonction. Est ce que le 0 indiquant l'indice de mon élément dans mon tableau est considéré comme un Magic Number ?


In reply to Antonin Stampbach

Re: Magic numbers

by Ronan Boulic -

oui parce que la question que je me pose en voyant cette instruction est : à quoi correspond donc ce zéro ? Quelle est sa signification ?

PS: lire le prochain message sur swap

In reply to Ronan Boulic

Re: Magic numbers

by Enzo Palmisano -

Bonjour,

je me permet de poser ma question ici, afin de regrouper les questions sur le Magic Number.

Est-ce que le [i+1] dans ce type de code est un Magic number:

for(size_t i(0); i<tab.size()-1; i++)
{
        if(tab[i]<tab[i+1]
        {
             ...
        }
}

?

Je vous remercie 

In reply to Enzo Palmisano

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

by Ronan Boulic -

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.