Dans des langages statiques tels que Java/C #, je utilise couramment les constantes de cordes ou de chiffres, plutôt que de les insérer dans le code seul. Cependant, j'ai tendance à éviter cette pratique en JavaScript. Plus récemment, comme certains autres codeurs autour de moi ont pris cette approche dans JS, j'ai décidé que je devrais probablement consolider mon, soit leur raisonnement.
Il n'y a pas de syntaxe de déclaration "const" réelle dans JavaScript. Nous nous contestons généralement simplement d'une politique informelle de ne pas changer les propriétés majuscules. Mais mon opinion est généralement de les éviter tout à fait, car la plupart de leurs avantages sont perdus dans JavaScript. En Java, une chaîne MissPelt provoquera l'échec du programme lorsque vous essayez de l'exécuter, à quel point vous le corrigez et passez à autre chose. Avoir un vérificateur statique où les deux instances indiquent la même constante élimine ce problème, comme cela peut être trouvé à la compilation. Mais JavaScript aura tout simplement ce problème partout, car vous allez toujours découvrir l'exactitude de votre orthographe au moment de l'exécution:
Library = { doThing: function() }
setTimeout(function()
Liberry.doThing()
// No such object: Liberry
}, 0);
La meilleure sauvegarde contre cela, généralement "utilise strict". Pour les développeurs qui le préfèrent, je vais bien avec eux en utilisant cela pour trouver des problèmes avec des variables non déclarées plus rapidement. Mais mon opinion a été celle fournissant des constantes de chaîne pour les API REST, etc., ne vous préjuge pas contre quoi que ce soit. Un autre exemple:
CompanyAPI.constants.ENROLL_URL = "/rest/enroll";
CompanyAPI.constants.FIRST_NAME = "firstName";
ajax({url: CompanyAPI.constants.ENROLL_URL,
data: CompanyAPI.constants.FIRST_NAME
});
// vs.
ajax({url: "/rest/enroll",
data: "firstName"
});
... Vous vouliez écrire ce qui précède, mais ensuite fait des fautes de frappe. Whoops.
ajax({url: CompanyAPI.constants.ENROL_URL,
data: CompanyAPI.constants.FIRS_NAME
});
// vs.
ajax({url: "/rest/enrol",
data: "firsName"
});
L'une constante sera toujours fournie non définie, tandis que "le nom de FirSname" n'est pas meilleur. À cette fin, j'ai tendance à voir cela comme un avantage des langues statiques et non à la résolution d'un système pour le réparer (en plus de commencer à utiliser "Utiliser strict" pour le débogage). Certaines autres personnes peuvent-elles me dire quelle est leur pratique préférée pour la cordon/la constance entière?
EDIT: Pour clarifier, ma préférence est généralement de mettre des chaînes telles que "FirstName" directement en ligne sans aucune déclaration constante de niveau supérieur - Les pénalités d'orthographe sont les mêmes. Les chaînes qui pourraient avoir longtemps, comme une URL REST, j'aurai tendance à définir en haut du fichier.
Les constantes servent une fonction de vérification des erreurs dans les langues typographiques statiquement, mais elles servent également une seconde finalité. Ils centralisent des informations en un seul endroit. Ce n'est pas perdu lorsque nous passons à JavaScript.
Imaginez que votre exemple ressemble plus à cela,
config.js:
CompanyAPI.constants.ENROLL_URL = "/rest/enroll";
CompanyAPI.constants.FIRST_NAME = "firstName";
s'inscrire.js:
ajax({url: CompanyAPI.constants.ENROLL_URL,
data: CompanyAPI.constants.FIRST_NAME
});
spécial-inscription.js:
ajax({url: CompanyAPI.constants.ENROLL_URL,
data: CompanyAPI.constants.FIRST_NAME
});
need-to-Inscrivez-vous-de-the-autre-place.js:
ajax({url: CompanyAPI.constants.ENROLL_URL,
data: CompanyAPI.constants.FIRST_NAME
});
goto-inscription.js:
redirect({url: CompanyAPI.constants.ENROLL_URL,
data: CompanyAPI.constants.FIRST_NAME
});
Remarquez comment, maintenant, ces constantes se présentent dans des fichiers partout. Si je n'utilisais pas de constantes, je devrais trouver toutes les instances de cette chaîne particulière et les remplacer manuellement. Certes, il y a des doubles emplois ici, mais remarquez que le dernier est en réalité différent. Cela signifie que même si nous avons supprimé la duplication, nous ne pourrions pas réellement résumer cela. Maintenant, parce que nous utilisons des constantes et CompanyAPI.constants.FIRST_NAME
doit changer, nous pouvons le modifier n et un seul Place, et il change automatiquement partout.
Si j'utilise une chaîne en un seul endroit et que ce n'est pas une configuration (c.-à-d. Un indice de chaîne Array n'est pas configuré), alors je vais le mettre en ligne. Si je trouve que je l'utilise dans quelques endroits proches les uns des autres, je vais regarder pour le refroidir en une seule utilisation. Si je ne peux pas refroidir, je le déplacerais probablement dans une constante de niveau "de classe".
Tout comme apprendre une autre langue, il ne faut pas la comparer à sa langue maternelle. Certaines langues ont souvent des concepts introuvables dans d'autres. Nous apprenons simplement à les accepter.
Les constantes de Java, C # et C++ n'existent pas dans le code binaire. Ces constantes ont été inventées pour aider les programmeurs et les compilateurs. Comme cette réponse ( https://stackoverflow.com/questions/130396/are-Ille-Contstants-in-javascript ) dit "rien n'est jamais constant"
Par conséquent, la réponse à vos questions est dans la convention de dénomination et l'examen du code. Vous et votre équipe devrez définir comment nommer les constantes, conviendrons que les constantes ne seront pas modifiées et utiliseront l'examen du code comme moyen de faire respecter la règle. À la fin de la journée, ce n'est pas grave que vous décidez d'y aller, ce ne sera pas une impasse.
Ma façon préférée de traiter avec des constantes est
var NAMESPACE.CONSTANT = 1;