Conventions de dénomination JavaScript [fermé]

257

Je sais qu'il y a beaucoup de controverse (peut-être pas de controverse, mais des arguments au moins) sur la convention de dénomination la plus appropriée pour JavaScript.

Comment nommez-vous vos variables, fonctions, objets et autres?

Je laisserai mes propres réflexions à ce sujet, car je ne fais pas de JS depuis longtemps (quelques années seulement), et je viens de recevoir une demande de création d'un document avec des conventions de dénomination à utiliser dans nos projets au travail . J'ai donc regardé (google-ing) autour, et il y a tellement d'opinions différentes.

Les livres que j'ai lus sur JS utilisent eux-mêmes différentes conventions de dénomination, mais ils s'accordent tous sur un point: "Trouvez ce qui vous convient et respectez-le." Mais maintenant que j'ai beaucoup lu, j'ai trouvé que j'aimais certaines des autres méthodes un peu mieux que ce à quoi je suis habitué maintenant.

peirix
la source
Un guide à jour des conventions de dénomination de bon sens dans JS: robinwieruch.de/javascript-naming-conventions
Robin Wieruch

Réponses:

202

Je suis les conventions de code de Douglas Crockford pour javascript. J'utilise également son outil JSLint pour valider le respect de ces conventions.

Geoff
la source
30
JSLint peut être trop radical et restrictif pour de nombreux développeurs, alors JSHint peut être un meilleur choix.
Pavel Hodek
7
Crockford n'entre pas dans ce niveau de détail, mais qu'en est-il des variables qui commencent par une majuscule, car elles se réfèrent à un acronyme - la première lettre, ou l'acronyme entier doit-elle être minuscule? Exemple: ECBhandlevs ecbHandle( peu importe ce que signifie la BCE).
Dan Dascalescu
13
Bien que ce soit un bon lien, je ne peux pas croire qu'une "réponse de lien" ait autant de votes. Vous pouvez au moins extraire et formater les parties pertinentes de la page liée.
Adrien Be
2
Je pense qu'il va bien avec le lien. Si cela vous inquiète, vous devez modifier le message.
nckbrz
4
Je regarde vraiment Crockford mais ses conventions de code semblent très dépassées. Je conseillerais de regarder @PavelHodek répondre plus bas dans la liste
Per Hornshøj-Schierbeck
160

Comme le dit Geoff, ce que dit Crockford est bon.

La seule exception que je suis (et que j'ai vu largement utilisée) est d'utiliser $ varname pour indiquer un objet jQuery (ou n'importe quelle bibliothèque). Par exemple

var footer = document.getElementById('footer');

var $footer = $('#footer');

Deebster
la source
7
J'utilise aussi $ pour cela. Je vois souvent des gens utiliser $ pour indiquer une copie en cache d'un objet. J'ai toujours pensé que c'était un jeu de mots. cache> "cash"> $
Shawn Whinnery
1
Ce n'est peut-être pas la meilleure idée si vous utilisez AngularJS - les services de base sont préfixés par '$'
Filip Sobczak
2
Je recommande fortement de NE PAS utiliser de caractères spéciaux dans les noms de variables. Beaucoup de frameworks utilisent spécialement $.
nckbrz
1
@nixxbb C'est très bien si vous étendez correctement les variables - ce que les cadres décents font aussi.
Andre Figueiredo
1
Je vois les lignes de guilde de Crockford mentionner "N'utilisez pas _ underbar comme premier ou dernier caractère d'un nom. Il est parfois destiné à indiquer la confidentialité". J'utilise personnellement underbar pour indiquer les membres privés. Est-ce une mauvaise pratique? Y a-t-il une alternative?
Ian G
112

Vous pouvez suivre ce guide de style Google JavaScript

En général, utilisez functionNamesLikeThis, variableNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis et SYMBOLIC_CONSTANTS_LIKE_THIS.

EDIT: Voir une belle collection de guides de style JavaScript et embellisseurs .

Pavel Hodek
la source
15
Je ne sais pas si je suis entièrement d'accord avec cela, étant donné qu'ils ont développé Dart et GWT (les extensions chrome api javascript sont également très similaires à java). Pour certaines équipes de Google, la meilleure façon de développer du javascript pourrait être de l'écrire dans une autre langue.
badunk
2
J'ai toujours trouvé étrange la convention de dénomination privée de Google , au lieu de le _fooBarfaire fooBar_- Microsoft l'a fait correctement: asp.net/ajaxlibrary/act_contribute_codingStandards.ashx
Daniel Sokolowski
3
@DanielSokolowski Qu'en est-il de l'utilisation d'Intellisense? Si vous préfixez un grand nombre de variables avec un trait de soulignement, ce n'est qu'un autre caractère que vous devez taper à chaque fois que vous accédez à ces variables. À la fin, votre liste intellisense semble plus propre et il est juste un peu plus rapide de trouver ce dont vous avez besoin.
FreeAsInBeer du
@FreeAsInBeer vrai sur le caractère supplémentaire mais je ne pense pas que ce soit plus rapide. Taper _lors du référencement de vars privés entraînerait immédiatement l'intellisense limitant les résultats; à la fin, j'ai pensé que c'était une préférence personnelle.
Daniel Sokolowski
1
Merci d'avoir créé un lien vers la liste des guides de style. Je ne sais pas si l'on mérite de suivre exclusivement ou comment encore décider lequel ou si je dois utiliser une fusion. Mais savoir où en trouver plusieurs au même endroit est une véritable aubaine.
Roger_S
9

Une convention que j'aimerais essayer est de nommer les modules statiques avec un préfixe «the». Regarde ça. Quand j'utilise le module de quelqu'un d'autre, ce n'est pas facile de voir comment je suis censé l'utiliser. par exemple:

define(['Lightbox'],function(Lightbox) {
  var myLightbox = new Lightbox() // not sure whether this is a constructor (non-static) or not
  myLightbox.show('hello')
})

Je pense à essayer une convention où les modules statiques utilisent «le» pour indiquer leur préexistence. Quelqu'un a-t-il vu un meilleur moyen que cela? Ressemblerait à ceci:

define(['theLightbox'],function(theLightbox) {
  theLightbox.show('hello') // since I recognize the 'the' convention, I know it's static
})
SimplGy
la source
6

Je pense qu'en plus de quelques limitations de syntaxe; le raisonnement des conventions de nommage est très indépendant du langage. Je veux dire, les arguments en faveur de c_style_functions et JavaLikeCamelCase pourraient tout aussi bien être utilisés dans le sens inverse, c'est juste que les utilisateurs du langage ont tendance à suivre les auteurs du langage.

Cela dit, je pense que la plupart des bibliothèques ont tendance à suivre à peu près une simplification de CamelCase de Java. Je trouve que les conseils de Douglas Crockford sont de bon goût pour moi.

Javier
la source
2

C'est une question individuelle qui peut dépendre de la façon dont vous travaillez. Certaines personnes aiment mettre le type de variable au début de la variable, comme "str_message". Et certaines personnes aiment utiliser le soulignement entre leurs mots ("mon_message") tandis que d'autres aiment les séparer avec des lettres majuscules ("monMessage").

Je travaille souvent avec d'énormes bibliothèques JavaScript avec d'autres personnes, donc les fonctions et les variables (à l'exception des variables privées à l'intérieur des fonctions) doivent commencer par le nom du service pour éviter les conflits, comme "guestbook_message".

En bref: les noms de variables et de fonctions anglais, minuscules et bien organisés sont préférables selon moi. Les noms doivent décrire leur existence plutôt que d'être courts.

Ivar
la source
2
"donc les fonctions et les variables (à l'exception des variables privées à l'intérieur des fonctions) doivent commencer par le nom du service pour éviter les conflits", cette déclaration est inexacte . Vous pouvez correctement avoir des fonctions et des objets "namespaces" qui ne saignent pas via plusieurs frameworks javascript. Il y avait une très bonne présentation sur la façon d'y parvenir à partir de MIX11 channel9.msdn.com/Events/MIX/MIX11/OPN08
Chris Marisic