C'est un sujet quelque peu controversé, et je suppose qu'il y a autant d'opinions que de programmeurs. Mais pour le plaisir, je veux savoir quelles sont les pratiques courantes en entreprise (ou dans vos lieux de travail).
Sur mon lieu de travail, nous avons des directives de codage strictes. Une section est consacrée aux chaînes / nombres magiques. Il indique (pour C #):
N'utilisez pas de valeurs littérales, numériques ou chaînes, dans votre code autrement que pour définir des constantes symboliques. Utilisez le modèle suivant pour définir les constantes:
public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; }
Il existe des exceptions: les valeurs 0, 1 et null peuvent presque toujours être utilisées en toute sécurité. Très souvent, les valeurs 2 et -1 sont également correctes. Les chaînes destinées à la journalisation ou au traçage sont exemptées de cette règle. Les littéraux sont autorisés lorsque leur signification est claire par rapport au contexte et non sujets à de futurs changements.
mean = (a + b) / 2; // okay
WaitMilliseconds(waitTimeInSeconds * 1000); // clear enough
Une situation idéale serait un document de recherche officiel montrant les effets sur la lisibilité / maintenabilité du code lorsque:
- Les nombres / cordes magiques sont partout
- Les chaînes / nombres magiques sont remplacés par des déclarations constantes raisonnablement (ou à différents degrés de couverture) - et s'il vous plaît ne me criez pas pour utiliser "raisonnablement", je sais que tout le monde a une idée différente de ce qui est "raisonnablement"
- Les chaînes / nombres magiques sont remplacés en excès et dans des endroits où ils ne devraient pas être (voir mon exemple ci-dessous)
Je voudrais le faire pour avoir des arguments scientifiquement fondés lorsque je me dispute avec un de mes collègues, qui va au point de déclarer des constantes comme:
private const char SemiColon = ';';
private const char Space = ' ';
private const int NumberTen = 10;
Un autre exemple serait (et celui-ci est en JavaScript):
var someNumericDisplay = new NumericDisplay("#Div_ID_Here");
Collez-vous les ID DOM au-dessus de votre fichier javascript si cet ID n'est utilisé qu'à un seul endroit?
J'ai lu les rubriques suivantes:
StackExchange
StackOverflow
Bytes IT Community
Il y a beaucoup plus d'articles, et après avoir lu ces quelques modèles émergent.
Donc, ma question est d'utiliser les chaînes et les nombres magiques dans notre code? Je recherche spécifiquement des réponses d'experts qui sont appuyées par des références si possible.
NumberTen = 10
C'est inutile car le chiffre 10 ne sera pas redéfini. MaxRetryCount = 10
Cela a un point a, nous pouvons vouloir changer le nombre maximal de nouvelles tentatives. private const char SemiColon = ';';
Stupide. private const char LineTerminator = ';'
; Intelligent.