Convenciones de nomenclatura de JavaScript [cerrado]


257

Sé que hay mucha controversia (tal vez no controversia, pero al menos argumentos) sobre qué convención de nomenclatura es la mejor para JavaScript.

¿Cómo nombras tus variables, funciones, objetos y demás?

Dejaré mis propios pensamientos sobre esto, ya que no he estado haciendo JS durante mucho tiempo (solo un par de años), y acabo de recibir una solicitud para crear un documento con convenciones de nomenclatura para usar en nuestros proyectos en el trabajo . Así que he estado buscando (google-ing), y hay muchas opiniones diferentes.

Los libros que he leído en JS también usan diferentes convenciones de nomenclatura, pero todos están de acuerdo en un poco: "Encuentra lo que más te convenga y cúmplelo". Pero ahora que he leído tanto, descubrí que me gustan algunos de los otros métodos un poco mejor de lo que estoy acostumbrado ahora.


Una guía actualizada de convenciones de nomenclatura de sentido común en JS: robinwieruch.de/javascript-naming-conventions
Robin Wieruch

Respuestas:


202

Sigo las convenciones de código de Douglas Crockford para javascript. También uso su herramienta JSLint para validar siguiendo esas convenciones.


30
JSLint puede ser demasiado radical y restrictivo para muchos desarrolladores, entonces JSHint puede ser una mejor opción.
Pavel Hodek

77
Crockford no entra en este nivel de detalle, pero ¿qué pasa con las variables que comienzan con una letra mayúscula, porque se refieren a un acrónimo? ¿Deberían estar en minúscula la primera letra o el acrónimo completo? Ejemplo: ECBhandlevs. ecbHandle( no importa lo que signifique BCE).
Dan Dascalescu

13
Aunque es un buen enlace, no puedo creer que una "respuesta de enlace" tenga tantos votos. Al menos podría extraer y formatear las partes relevantes de la página vinculada.
Adrien Be

2
Creo que lo está haciendo bien con el enlace. Si está tan preocupado, debe editar la publicación.
nckbrz

44
Realmente admiro a Crockford, pero sus convenciones de código parecen muy anticuadas. Recomendaría mirar la respuesta de @PavelHodek más abajo en la lista
Per Hornshøj-Schierbeck

160

Como dice Geoff, lo que dice Crockford es bueno.

La única excepción que sigo (y he visto ampliamente utilizada) es usar $ varname para indicar un objeto jQuery (o cualquier biblioteca). P.ej

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

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


77
Yo uso $ para esto también. A menudo veo que la gente usa $ para indicar una copia en caché de un objeto. Siempre supuse que era un juego de palabras. caché> "efectivo"> ​​$
Shawn Whinnery

1
Esta podría no ser la mejor idea si está utilizando AngularJS: los servicios principales tienen el prefijo '$'
Filip Sobczak

2
Recomiendo NO usar caracteres especiales en nombres de variables. Muchos frameworks usan $ especialmente.
nckbrz

1
@nixxbb Eso está bien si acerta correctamente las variables, que también lo hacen los marcos decentes.
Andre Figueiredo

1
Veo que las frases de culpabilidad de Crockford mencionan "No use _ underbar como el primer o último carácter de un nombre. A veces tiene la intención de indicar privacidad". Yo personalmente uso underbar para indicar miembros privados. ¿Es esta una mala práctica? ¿Hay una alternativa?
Ian G

112

Puedes seguir esta Guía de estilo de JavaScript de Google

En general, use functionNamesLikeThis, variableNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis y SYMBOLIC_CONSTANTS_LIKE_THIS.

EDITAR: vea una buena colección de guías de estilo y embellecedores de JavaScript .


15
No estoy seguro de si estoy totalmente de acuerdo con eso, teniendo en cuenta que desarrollaron Dart y GWT (la API de JavaScript de extensiones de Chrome también es muy similar a Java). Para algunos equipos en Google, la mejor manera de desarrollar JavaScript podría ser escribirlo en algún otro idioma.
badunk

2
Siempre me pareció extraña la convención de nomenclatura privada de Google , en lugar de _fooBarhacerlo fooBar_: Microsoft acertó: asp.net/ajaxlibrary/act_contribute_codingStandards.ashx
Daniel Sokolowski el

3
@DanielSokolowski ¿Qué pasa cuando se usa Intellisense? Si prefijas una gran cantidad de variables con un guión bajo, entonces ese es solo otro carácter que tienes que escribir cada vez que accedes a esas variables. Con esto al final, su lista intellisense se ve más limpia y es un poco más rápido encontrar lo que necesita.
FreeAsInBeer

@FreeAsInBeer es cierto sobre el personaje adicional, pero no creo que sea más rápido. Escribir _al hacer referencia a vars privados daría como resultado una inteligencia inmediata que limitaría los resultados; Al final pensé que era preferencia personal.
Daniel Sokolowski

1
Gracias por enlazar a la lista de guías de estilo. No sé si vale la pena seguirlo exclusivamente o cómo decidir cuál o si debería usar una amalgamación. Pero saber dónde encontrar varios en un solo lugar es una verdadera bendición.
Roger_S

9

Una convención que me gustaría probar es nombrar módulos estáticos con el prefijo 'the'. Mira esto. Cuando uso el módulo de otra persona, no es fácil ver cómo se supone que debo usarlo. p.ej:

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

Estoy pensando en probar una convención en la que los módulos estáticos usen 'the' para indicar su preexistencia. ¿Alguien ha visto una mejor manera que esta? Se vería así:

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

6

Creo que además de algunas limitaciones de sintaxis; Las convenciones de nomenclatura son muy independientes del lenguaje. Quiero decir, los argumentos a favor de c_style_functions y JavaLikeCamelCase también podrían usarse de la manera opuesta, es solo que los usuarios del lenguaje tienden a seguir a los autores del lenguaje.

Dicho esto, creo que la mayoría de las bibliotecas tienden a seguir aproximadamente una simplificación de CamelCase de Java. Encuentro los consejos de Douglas Crockford de buen gusto para mí.


2

Esa es una pregunta individual que podría depender de cómo esté trabajando. A algunas personas les gusta poner el tipo de variable al comienzo de la variable, como "str_message". Y a algunas personas les gusta usar guiones bajos entre sus palabras ("my_message") mientras que a otras les gusta separarlas con letras mayúsculas ("myMessage").

A menudo estoy trabajando con enormes bibliotecas de JavaScript con otras personas, por lo que las funciones y variables (excepto las variables privadas dentro de las funciones) deben comenzar con el nombre del servicio para evitar conflictos, como "guestbook_message".

En resumen: los nombres de funciones y variables en inglés, en minúsculas y bien organizados son preferibles para mí. Los nombres deben describir su existencia en lugar de ser cortos.


2
"así que las funciones y variables (excepto las variables privadas dentro de las funciones) comenzaron con el nombre del servicio para evitar conflictos", esta declaración es inexacta . Puede tener correctamente funciones y objetos de "espacio de nombres" que no sangran a través de múltiples marcos javascript. Hubo una muy buena presentación sobre cómo lograr esto desde MIX11 channel9.msdn.com/Events/MIX/MIX11/OPN08
Chris Marisic
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.