Prefacio
Las ventajas de los buenos hábitos de escritura de JavaScript son evidentes. Hoy, Bin Go recomienda las especificaciones de programación de Dojo JavaScript para usted, que son las especificaciones de estilo de programación de JavaScript bastante buenas. Se recomienda que aprenda de esta especificación para escribir JavaScript. Gracias a I.Feelinglucky por la traducción.
secuencia
Se permite cualquier violencia de esta guía si mejora la legibilidad.
Todos los códigos deben ser fáciles de leer para otros.
Referencia de lectura rápida
API central, utilice el siguiente estilo:
| estructura | regla | Comentario |
| Módulo | minúscula | No use múltiples semánticas (nunca múltiples palabras) |
| amable | camello | |
| Métodos públicos | mezcla | Otras llamadas externas también pueden usar Lower_Case (), en este estilo |
| Variables públicas | mezcla | |
| constante | Camel o capital |
Aunque no es necesario lo siguiente, se recomienda usar:
| estructura | regla |
| Método privado | Mixto, ejemplo: _mixedcase |
| Variables privadas | Mixto, ejemplo: _mixedcase |
| Parámetros del método | Mixto, ejemplo: _mixedcase, mixedcase |
| Variable local | Mixto, ejemplo: _mixedcase, mixedcase |
Especificaciones de nombres
1. El nombre de la variable debe ser letras minúsculas.
2. El nombramiento de clases utiliza reglas de nombres de camellos, como:
Cuenta, EventHandler
3. Las constantes deben declararse en el frente de un objeto (clase) o variable de enumeración. El nombramiento de una variable de enumeración debe tener un significado práctico, y sus miembros deben usar reglas de nombres de camellos o capitalizar:
La copia del código es la siguiente:
var nodetypes = {
Elemento: 1,
Documento: 2
}
4. Las palabras abreviadas no pueden usar nombres de capital como nombres de variables:
getinnerhtml (), getxml (), xmlDocument
5. El comando del método debe ser una frase verbo o verbo:
obj.getSomevalue ()
6. El nombramiento de las clases públicas debe nombrarse utilizando nombres mixtos (Case Mixed).
7. El nombre de una variable CSS debe usar su misma variable de clase pública correspondiente.
8. Los miembros del atributo variable de la clase privada deben nombrarse con un nombre mixto (mixedcase) y subrayado (_). Por ejemplo:
La copia del código es la siguiente:
var myclass = function () {
var _buffer;
this.dosomthing = function () {
};
}
9. Si la variable se establece en privado, debe subrayarse antes.
this._SomePrivateVariable = Declaración;
10. Las variables comunes deben usar un nombre de tipo que sea consistente con su nombre:
settópico (tema) // El tema variable es una variable de tipo de tema
11. Todos los nombres de variables deben usar nombres en inglés.
12. Si una variable tiene un alcance amplio (alcance grande), se deben usar variables globales; En este momento, puede diseñarse como miembros de una clase. Si el alcance relativo es variables más pequeñas o privadas, use palabras concisas para nombrarlo.
13. Si una variable tiene su valor de retorno implícito, evite usar sus métodos similares:
Gethandler (); // Evite usar getEventHandler ()
14. Las variables públicas deben expresar claramente sus propios atributos para evitar la ambigüedad en el significado, como:
Mouseeventhandler
, no mseevthdlr.
Preste atención a esta disposición nuevamente, los beneficios de hacerlo son muy obvios. Puede expresar claramente el significado definido por la expresión. Por ejemplo:
dojo.events.mouse.handler // en lugar de dojo.events.mouse.mouseeventhandler
15. La clase/constructores se puede nombrar utilizando el nombre que extiende su clase base, de modo que el nombre de su clase base se pueda encontrar de manera correcta y rápida:
Manual
Uieventhandler
Mouseeventhandler
La clase base puede reducir su nombres mientras describe claramente sus propiedades:
Mouseeventhandler en oposición a MouseUieventhandler.
Especificaciones especiales de nombres
El término "get/set" no debe vincularse a un campo a menos que se define como una variable privada.
El nombre de la variable precedido por "is" debería ser un valor booleano, y puede ser "tiene", "puede" o "debería".
El término "calcular" como el nombre de la variable debe ser una variable que se ha calculado.
El término "encontrar" como el nombre de la variable debe ser una variable que se haya encontrado completada.
El término "inicializar" o "init" como el nombre de la variable debe ser una clase u otro tipo de variable que se haya instanciado (inicializado).
Las variables de control de UI (interfaz de usuario) deben ser seguidas por el nombre del tipo de control, por ejemplo: LeftComboBox, TopScrollPane.
El número plural debe tener su convención de nombre común (Texto original: la forma plural debe usarse para nombrar colecciones).
Los nombres de variables que comienzan con "NUM" o "Cuenta" son convencionalmente numéricos (objeto).
Se recomiendan variables repetidas para usar variables con nombres como "i", "j", "k" (y así sucesivamente).
Los términos complementarios deben usar palabras complementarias, como: get/set, agregue/eliminar, crear/destruir, iniciar/detener, insertar/eliminar, comenzar/finalizar, etc.
Intente usar la abreviatura si es posible.
Evite la ambigüedad de los nombres de variables booleanas, por ejemplo:
nonoterror, no es ilegal
La clase de error recomienda agregar "excepción" o "error" al nombre de la variable.
Si un método devuelve una clase, debe indicar lo que devuelve en su nombre; Si es un proceso, debería indicar lo que hizo.
documento
Utilice 4 pestañas en blanco para sangrar.
Si su editor admite etiquetas de archivo, agregue la siguiente línea para que nuestro código sea más fácil de leer:
// vim: ts = 4: noet: tw = 0:
Nota del traductor: los extranjeros usan editores VIM con más frecuencia, por lo que puede optar por seguir este artículo.
El plegamiento del código debe verse hecho y ser lógico:
La copia del código es la siguiente:
var someExpression = Expression1
+ Expresión2
+ Expresión3;
var o = someObject.get (
Expresión1,
Expresión2,
Expresión3
);
Nota: La sangría de la expresión debe ser consistente con la declaración variable.
Nota: Los parámetros de la función deben estar explícitamente sangrantes, y las reglas de sangría son consistentes con otros bloques.
variable
disposición
pedazo
Un fragmento de código normal debería verse así:
La copia del código es la siguiente:
while (! Isdone) {
Dosomething ();
isdone = moretodo ();
}
La declaración IF debería verse así:
La copia del código es la siguiente:
if (somecondition) {
declaraciones;
} else if (someOthercondition) {
declaraciones;
} demás {
declaraciones;
}
La declaración de For debería verse así:
La copia del código es la siguiente:
para (inicialización; condición; actualización) {
declaraciones;
}
La declaración del tiempo debería verse así:
La copia del código es la siguiente:
while (! Isdone) {
Dosomething ();
isdone = moretodo ();
}
El hacer ... la declaración de tiempo debería verse así:
La copia del código es la siguiente:
hacer {
declaraciones;
} while (condición);
La instrucción Switch debería verse así:
La copia del código es la siguiente:
Switch (condición) {
Caso ABC:
declaraciones;
// Fallthrough
CASO DEF:
declaraciones;
romper;
por defecto:
declaraciones;
romper;
}
El intento ... la declaración de captura debería verse así:
La copia del código es la siguiente:
intentar {
declaraciones;
} catch (ex) {
declaraciones;
} finalmente {
declaraciones;
}
Una sola línea si más, mientras que o para declaraciones también deben incluirse en los soportes, pero se pueden escribir así:
if (condición) {instrucción; }
while (condición) {declaración; }
para (intialización; condición; actualización) {declaración; }
blanco
Comentario
documento
Lo siguiente proporciona algunas funciones básicas u objetos Métodos de descripción:
Resumen: una breve descripción del propósito de esta función u implementación de objetos
Descripción: Una breve descripción de esta función o clase
Return: describe lo que devuelve esta función (sin incluir el tipo de retorno)
Información de función básica
La copia del código es la siguiente:
función(){
// Resumen: Pronto tendremos suficiente tesoro para gobernar toda Nueva Jersey.
// Descripción: O podríamos obtener una nueva sala de cuarto.
// Mira, vas a buscarlo. Él no te grita.
// Todo lo que intento hacer es hacerlo sonreír y cantar alrededor
// él y bailar a su alrededor y él simplemente me acuesta.
// Me dijo que me metiera en el congelador porque había un carnaval allí.
// Devuelve: ¡Mira, una cinta de Bananarama!
}
Información de la función de objeto
Sin descripción del valor de retorno
La copia del código es la siguiente:
{
// Resumen: Dingle, contrata a la máquina Rainbow!
// descripción:
// Te digo que, desearía ser-oh mi g-ese rayo,
// Siendo así, la velocidad, es posible que quieras ajustar eso.
// Realmente hizo un número en mi espalda, allí. Quiero decir, y yo no
// quiero decir latigazo cervical, porque eso es demasiado lejos,
// Pero estás herido, ¿verdad?
}
Declaración de funciones
En algunos casos, la llamada y la declaración de funciones son invisibles. En este caso, no tenemos forma de incluir instrucciones, etc. (para llamadas de programa) en la función. Si encuentra esta situación, puede usar una clase para encapsular la función.
Nota: Este método solo se puede usar sin parámetros inicializados de la función. Si no, serán ignorados.
La copia del código es la siguiente:
dojo.declare (
"foo",
nulo,
{
// Resumen: Phew, esto es relajante, Frylock.
// descripción:
// hace miles de años, antes de los amanecer de
// Hombre como lo conocíamos, estaba Sir Santa de Claus: un
// creatividad similar a un simio que hace juguetes crudos e inútiles
// de Dino-Bones, arrojándolos a la creatividad similar a Chimp con
// manos arrugadas independientemente de cómo se comportaron
// año anterior.
// Devoluciones: a menos que Carl pague tarifas a los ancianos Elfos en el espacio.
}
);
<h3> parámetros </h3>
<Ol>
<li> Tipo simple
Los tipos simples de parámetros se pueden comentar y explicar directamente en la definición de parámetros de función.
[cc lang = "javascript"] función (/*string*/ foo,/*int*/ bar) ...
Parámetros de tipo variable
Aquí hay algunos modificadores para referencia:
? Parámetros opcionales
... El rango de parámetros de la cara es incierto
Formación
function (/*string?*/ foo, /*int...*/ bar,/*string []*/ baz) ...
Descripción del parámetro global
Si desea agregar una descripción, puede moverlos al bloque de inicialización.
El formato de información básica es: * Campo de descripción * Campo ( * Key * Descripción oración)
El formato de parámetros y variables es:*clave*~*type*~ campo descripción (*clave*~*type*~ Descripción oración)
Nota:*Palabras clave*y ~*tipo*~ se pueden expresar en cualquier letra y número.
La copia del código es la siguiente:
función (foo, bar) {
// foo: cadena
// utilizado para ser el primer parámetro
// bar: int
// utilizado para ser el segundo parámetro
}
variable
Dado que las declaraciones de variables de instancia, las variables prototipo y las variables externas son consistentes, existen muchos métodos para declarar y modificar variables. La definición y el posicionamiento específico deben indicar el nombre, el tipo, el alcance y otra información de la variable en la primera ubicación donde aparece la variable.
La copia del código es la siguiente:
función foo () {
// mystring: cadena
// Times: int
// cuántas veces imprimir mystring
// separador: cadena
// Qué imprimir entre mystring*
this.mystring = "Texto de marcador de posición";
this.times = 5;
}
foo.prototype.setString = function (myString) {
this.mystring = myString;
}
foo.prototype.toString = function () {
para (int i = 0; i <this.times; i ++) {
dojo.debug (this.mystring);
dojo.debug (foo.separator);
}
}
foo.separator = "=====";
Comentarios variables en objetos
Se debe utilizar un método de anotación que sea consistente con los valores y métodos de objetos, como cuando declaran:
La copia del código es la siguiente:
{
// clave: cadena
// un valor simple
Clave: "Valor",
// Key2: cadena
// otro valor simple
}
Valor de retorno
Debido a que las funciones pueden devolver múltiples valores diferentes (tipos) al mismo tiempo, cada valor de retorno debe agregarse al comentario del tipo de retorno. Los comentarios se comentan en la línea. Si todos los valores de retorno son del mismo tipo, se especifica el tipo devuelto; Si hay múltiples valores de retorno diferentes, el tipo de retorno se marca como "mixto".
La copia del código es la siguiente:
función() {
if (arguments.length) {
regresar "Usted aprobó el argumento (s)"; // Cadena
} demás {
devolver falso; // booleano
}
}
Seudocódigo (para ser discutido)
A veces debe agregar una descripción del proceso funcional para esta función y clase en una función o clase. Si planea hacer esto, puede usar /*======== (= Los caracteres deben aparecer 5 veces o más). La ventaja de esto es que no tiene que agregar estas cosas al código (nota del traductor: el autor original puede significar un sistema de administración de código).
De esta manera, habrá un comentario muy largo en /*===== y ====* /. Puede considerar si eliminarlo después de ajustar la función.
La copia del código es la siguiente:
/*=======
módulo.pseudo.kwargs = {
// url: cadena
// La ubicación del archivo
URL: "",
// mimetype: cadena
// texto/html, texto/xml, etc.
MIMETYPE: ""
}
=====*/
función (/*módulo.pseudo.kwargs*/ kwargs) {
dojo.debug (kwargs.url);
dojo.debug (kwargs.mimetype);
}
Enlace original: http://dojotoolkit.org/developer/styleguide
Traducido por: I.Feelinglucky {at} gmail.com desde http://www.gracecode.com