Le point culminant de ce que les autres réponses ont compris n'est pas que les "valeurs magiques" sont mauvaises, mais qu'elles devraient l'être:
- définis de manière reconnaissable comme des constantes;
- définis une seule fois dans tout leur domaine d’utilisation (si possible du point de vue de l’architecture);
- définies ensemble si elles forment un ensemble de constantes qui sont en quelque sorte liées;
- définis à un niveau de généralité approprié dans l'application dans laquelle ils sont utilisés; et
- définis de manière à limiter leur utilisation dans des contextes inappropriés (par exemple, susceptibles de vérification de type).
Ce qui distingue généralement les "constantes" acceptables des "valeurs magiques" est une violation d'une ou plusieurs de ces règles.
Bien utilisées, les constantes nous permettent simplement d’exprimer certains axiomes de notre code.
Ce qui m'amène au dernier point, à savoir un usage excessif de constantes (et donc d'un nombre excessif d'hypothèses ou de contraintes exprimées en termes de valeurs), même s'il respecte par ailleurs les critères ci-dessus (mais surtout s'il s'en écarte), Cela peut impliquer que la solution en cours d’élaboration n’est pas suffisamment générale ou structurée (nous ne parlons donc plus vraiment du pour et du contre des constantes, mais du pour et du contre d’un code bien structuré).
Les langages de haut niveau ont des constructions pour les modèles dans les langages de bas niveaux qui devraient employer des constantes. Les mêmes modèles peuvent également être utilisés dans le langage de niveau supérieur, mais ne devraient pas l'être.
Mais cela peut être un jugement d'expert basé sur une impression de toutes les circonstances et sur ce à quoi une solution devrait ressembler, et la façon dont ce jugement sera justifié dépendra beaucoup du contexte. En effet, il pourrait ne pas être justifié en termes de principe général, si ce n’est d’affirmer "je suis assez vieux pour avoir déjà vu ce genre de travail, avec lequel je suis familier, mieux fait"!
EDIT: après avoir accepté une édition, en rejeter une autre, et ayant maintenant effectué ma propre édition, puis-je maintenant considérer le style de formatage et de ponctuation de ma liste de règles à régler une fois pour toutes haha!