Prefácio
As vantagens dos bons hábitos de escrita de JavaScript são evidentes. Hoje, o Bin Go recomenda as especificações de programação do JavaScript Dojo, que são especificações de estilo de programação JavaScript bastante boas. Recomenda -se que você aprenda com esta especificação para escrever JavaScript. Obrigado a I.Feelinglucky pela tradução.
Sequência
Qualquer violência a este guia é permitida se aumentar a legibilidade.
Todos os códigos devem ser facilitados para a leitura de outras pessoas.
Referência de leitura rápida
API do núcleo, por favor, use o seguinte estilo:
| estrutura | regra | Comentários |
| Módulo | minúscula | Não use várias semânticas (nunca várias palavras) |
| tipo | camelo | |
| Métodos públicos | mistura | Outras chamadas externas também podem usar Lower_Case (), neste estilo |
| Variáveis públicas | mistura | |
| constante | Camelo ou capital |
Embora o seguinte não seja necessário, é recomendável usar:
| estrutura | regra |
| Método Privado | Misto, exemplo: _mixedcase |
| Variáveis privadas | Misto, exemplo: _mixedcase |
| Parâmetros do método | Misto, exemplo: _mixedcase, misto |
| Variável local | Misto, exemplo: _mixedcase, misto |
Especificações de nomeação
1. O nome da variável deve ser letras minúsculas.
2. A nomeação de classes usa regras de nomeação de camelo, como:
Conta, EventHandler
3. As constantes devem ser declaradas na frente de um objeto (classe) ou variável de enumeração. A nomeação de uma variável de enumeração deve ter significado prático, e seus membros devem usar regras de nomeação de camelo ou capitalizar:
A cópia do código é a seguinte:
Var NodeTypes = {
Elemento: 1,
Documento: 2
}
4. Palavras abreviadas não podem usar nomes de capital como nomes de variáveis:
getinnerhtml (), getxml (), xmldocument
5. O comando do método deve ser um verbo ou uma frase verbal:
obj.getsomevalue ()
6. A nomeação de classes públicas deve ser nomeada usando nomes mistos (misto).
7. O nome de uma variável CSS deve usar sua mesma variável de classe pública correspondente.
8. Os membros do atributo variável da classe privada devem ser nomeados com um nome misto (misto) e sublinhados (_). Por exemplo:
A cópia do código é a seguinte:
var myclass = function () {
var _buffer;
this.Dosomething = function () {
};
}
9. Se a variável for definida como privada, ela deve ser sublinhada antes dela.
this._womeprivateVariable = declaração;
10. As variáveis comuns devem usar um nome de tipo que seja consistente com o nome:
Tópico de variável Settópico (Tópico) // é uma variável de tipo
11. Todos os nomes de variáveis devem usar nomes em inglês.
12. Se uma variável tiver um amplo escopo (escopo grande), variáveis globais devem ser usadas; Neste momento, ele pode ser projetado como membros de uma classe. Se o escopo relativo for variáveis menores ou privadas, use palavras concisas para nomeá -lo.
13. Se uma variável tiver seu valor de retorno implícito, evite usar seus métodos semelhantes:
Gethandler (); // Evite usar getEventHandler ()
14. As variáveis públicas devem expressar claramente seus próprios atributos para evitar ambiguidade no significado, como:
MouseeventHandler
, não mseevthdlr.
Por favor, preste atenção a esta disposição novamente, os benefícios de fazê -lo são muito óbvios. Pode expressar claramente o significado definido pela expressão. Por exemplo:
dojo.events.mouse.handler // em vez de dojo.events.mouse.mouseeventhandler
15. Classe/Construtores pode ser nomeado usando o nome que estende sua classe base, para que o nome de sua classe base possa ser encontrado de maneira correta e rápida:
EventHandler
Uieventhandler
MouseeventHandler
A classe base pode reduzir sua nomeação enquanto descreve claramente suas propriedades:
MouseeventHandler em oposição ao MouseuieventHandler.
Especificações especiais de nomeação
O termo "get/set" não deve estar vinculado a um campo, a menos que seja definido como uma variável privada.
O nome da variável precedido por "IS" deve ser um valor booleano e pode ser "tem", "pode" ou "deve".
O termo "computação" como nome da variável deve ser uma variável que foi calculada.
O termo "encontre" como nome da variável deve ser uma variável que foi encontrada concluída.
O termo "inicializar" ou "init", pois o nome da variável deve ser uma classe ou outro tipo de variável que foi instanciado (inicializado).
As variáveis de controle da interface da interface do usuário (interface do usuário) devem ser seguidas pelo nome do tipo de controle, por exemplo: LeftCombobox, TopScrollPane.
O número plural deve ter sua convenção de nome comum (texto original: o formulário plural deve ser usado para nomear coleções).
Os nomes de variáveis que começam com "num" ou "count" são convencionalmente numéricos (objeto).
Recomenda -se variáveis repetidas para usar variáveis com nomes como "i", "j", "k" (e assim por diante).
Termos suplementares devem usar palavras suplementares, como: Get/Set, Adicione/Remover, Criar/Destruir, Iniciar/Parar, Inserir/Excluir, Iniciar/Final, etc.
Tente usar a abreviação, se possível.
Evite a ambiguidade dos nomes de variáveis booleanos, por exemplo:
não éror, não é ilegal
A classe de erro recomenda adicionar "exceção" ou "erro" ao nome da variável.
Se um método retornar uma classe, deve indicar o que retorna em seu nome; Se for um processo, deve indicar o que fez.
documento
Use 4 guias em branco para recuar.
Se o seu editor suportar tags de arquivo, adicione a seguinte linha para facilitar a leitura do código:
// vim: ts = 4: Noet: tw = 0:
Nota do tradutor: os estrangeiros usam os editores do VIM com mais frequência, para que você possa optar por seguir este artigo.
A dobragem de código deve parecer feita e ser lógica:
A cópia do código é a seguinte:
var alguma expressão = expressão1
+ Expressão2
+ Expressão3;
var o = algumObject.get (
Expressão1,
Expressão2,
Expressão3
);
Nota: O indentação da expressão deve ser consistente com a declaração variável.
Nota: Os parâmetros da função devem ser explicitamente recuados e as regras de indentação são consistentes com outros blocos.
variável
layout
pedaço
Um trecho de código normal deve ficar assim:
A cópia do código é a seguinte:
while (! isdone) {
doSomething ();
isdone = moretodo ();
}
A declaração IF deve ser assim:
A cópia do código é a seguinte:
if (SomeCondition) {
declarações;
} else if (algumacondição) {
declarações;
} outro {
declarações;
}
A declaração for deve ficar assim:
A cópia do código é a seguinte:
para (inicialização; condição; atualização) {
declarações;
}
A declaração do tempo deve ficar assim:
A cópia do código é a seguinte:
while (! isdone) {
doSomething ();
isdone = moretodo ();
}
O faça ... a declaração do tempo deve ficar assim:
A cópia do código é a seguinte:
fazer {
declarações;
} while (condição);
A declaração de switch deve ser assim:
A cópia do código é a seguinte:
Switch (condição) {
Caso ABC:
declarações;
// Fallthrough
caso def:
declarações;
quebrar;
padrão:
declarações;
quebrar;
}
A tentativa ... a declaração de captura deve ficar assim:
A cópia do código é a seguinte:
tentar {
declarações;
} catch (ex) {
declarações;
} finalmente {
declarações;
}
Linha única se, enquanto ou para declarações, também deve ser incluída entre colchetes, mas eles podem ser escritos assim:
if (condition) {declaração; }
while (condição) {declaração; }
para (intialização; condição; atualização) {declaração; }
em branco
Comentários
documento
A seguir, fornece algumas funções básicas ou objetos descrição dos métodos:
Resumo: Uma breve descrição do objetivo desta função ou implementação de objeto
Descrição: Uma breve descrição desta função ou classe
Retorno: descreve o que essa função retorna (sem incluir o tipo de retorno)
Informações da função básica
A cópia do código é a seguinte:
função(){
// Resumo: Em breve teremos tesouros suficientes para governar toda a Nova Jersey.
// Descrição: ou poderíamos apenas obter um novo quarto.
// olha, você vai encontrá -lo. Ele não grita com você.
// tudo que eu já tento fazer é fazê -lo sorrir e cantar por aí
// ele e dançar ao seu redor e ele apenas se deita em mim.
// ele me disse para entrar no freezer porque havia um carnaval lá.
// Retorna: Olha, uma fita de Bananarama!
}
Informações da função do objeto
Descrição do valor de retorno
A cópia do código é a seguinte:
{
// Resumo: Dingle, envolva a máquina do arco -íris!
// descrição:
// Diga a você o que, eu gostaria de ser-oh meu g-aquele feixe,
// Chegando assim, a velocidade, você pode querer ajustar isso.
// realmente fez um número nas minhas costas, lá. Quero dizer, e eu não
// quer dizer whiplash, ainda, porque isso é um pouco longe demais,
// Mas, você está ferido, certo?
}
Declaração de funções
Em alguns casos, a chamada e a declaração de funções são invisíveis. Nesse caso, não temos como incluir instruções, etc. (para chamadas de programa) na função. Se você encontrar essa situação, poderá usar uma classe para encapsular a função.
Nota: Este método pode ser usado apenas sem parâmetros inicializados da função. Caso contrário, eles serão ignorados.
A cópia do código é a seguinte:
dojo.declare (
"Foo",
nulo,
{
// Resumo: Ufa, isso com certeza é relaxante, Frylock.
// descrição:
// milhares de anos atrás, antes do amanhecer de
// homem como o conhecíamos, havia Sir Santa de Claus: um
// criatividade semelhante a um macaco, fazendo brinquedos pendentes e inúteis
// de dino-bones, arremessando-os com criatividade com chimpanzés com
// as mãos enrugadas, independentemente de como elas se comportaram
// ano anterior.
// retorna: a menos que Carl pague taxas aos anciãos de elfina no espaço.
}
);
<H3> parâmetros </h3>
<ol>
<li> Tipo simples
Tipos simples de parâmetros podem ser comentados e explicados diretamente na definição de parâmetros da função.
[cc lang = "javascript"] função (/*string*/ foo,/*int*/ bar) ...
Parâmetros de tipo variável
Aqui estão alguns modificadores para referência:
? Parâmetros opcionais
... o intervalo de parâmetros da face é incerto
Variedade
function (/*string?*/ foo, /*int...*/ bar,/*string []*/ baz) ...
Descrição do parâmetro global
Se você deseja adicionar uma descrição, poderá movê -la para o bloco de inicialização.
O formato de informação básica é: * chave * Descrição Campo ( * tecla * Descrição frase)
O formato de parâmetros e variáveis é:*key*~*tipo*~ Descrição Campo (*tecla*~*tipo*~ Descrição Sentença)
Nota:*palavras -chave*e ~*type*~ podem ser expressas em quaisquer letras e números.
A cópia do código é a seguinte:
função (foo, bar) {
// foo: string
// usado para ser o primeiro parâmetro
// bar: int
// usado para ser o segundo parâmetro
}
variável
Como as declarações das variáveis de instância, variáveis de protótipo e variáveis externas são consistentes, existem muitos métodos para declarar e modificar variáveis. Definição e posicionamento específicos devem indicar o nome, tipo, escopo e outras informações da variável no primeiro local em que a variável é exibida.
A cópia do código é a seguinte:
function foo () {
// mystring: string
// Times: int
// quantas vezes para imprimir mystring
// separador: string
// O que imprimir entre o mystring*
this.mystring = "texto de espaço reservado";
this.Times = 5;
}
foo.prototype.SetString = function (myString) {
this.mystring = mystring;
}
foo.prototype.toString = function () {
for (int i = 0; i <this.Times; i ++) {
dojo.debug (this.mystring);
dojo.debug (foo.separator);
}
}
foo.separator = "=====";
Comentários variáveis em objetos
Um método de anotação que é consistente com os valores e métodos dos objetos deve ser usado, como quando eles declaram:
A cópia do código é a seguinte:
{
// chave: string
// Um valor simples
chave: "valor",
// key2: string
// Outro valor simples
}
Valor de retorno
Como as funções podem retornar vários valores diferentes (tipos) ao mesmo tempo, cada valor de retorno deve ser adicionado ao comentário do tipo de retorno. Os comentários são apenas comentados na linha. Se todos os valores de retorno forem do mesmo tipo, o tipo retornado será especificado; Se houver vários valores de retorno diferentes, o tipo de retorno será marcado como "misto".
A cópia do código é a seguinte:
function () {
if (argumentos.length) {
retornar "você passou por argumentos"; // Corda
} outro {
retornar falso; // booleano
}
}
Pseudocódigo (a ser discutido)
Às vezes, você precisa adicionar uma descrição do processo funcional para esta função e classe em uma função ou classe. Se você planeja fazer isso, pode usar /*======= (= Os caracteres devem aparecer 5 vezes ou mais). A vantagem disso é que você não precisa adicionar essas coisas ao código (nota do tradutor: o autor original pode significar um sistema de gerenciamento de código).
Dessa forma, haverá um comentário muito longo em /*===== e ====* /. Você pode considerar se deve excluí -lo após o ajuste da função.
A cópia do código é a seguinte:
/*=======
module.pseudo.kwargs = {
// url: string
// a localização do arquivo
url: "",
// Mimetype: String
// text/html, text/xml, etc
Mimetype: ""
}
=====*/
function (/*module.pseudo.kwargs*/ kwargs) {
dojo.debug (kwargs.url);
dojo.debug (kwargs.mimetype);
}
Link original: http://dojotoolkit.org/developer/styleguide
Traduzido por: i.feelinglucky {at} gmail.com de http://www.gracecode.com