JavaScript Standard Style

EnglishEspañol (Latinoamérica)FrançaisItaliano (Italian)한국어 (Korean)Português (Brasil)简体中文 (Simplified Chinese)繁體中文 (Taiwanese Mandarin)

js-standard-style

Esse é um "TL;DR" (ou "muito grande; nemli") das regras do standard

A melhor forma de aprender sobre o standard é instalar e usar no seu código.

Regras

Ponto-e-vírgula

Uma leitura boa

E um vídeo bem explicativo:

Todos os minificadores de código populares usam minificação baseada em AST, logo, podem lidar com JavaScript sem ponto-e-vírgula sem problemas (já que ponto-e-vírgula não é obrigatório no JavaScript).

Um pedaço de "An Open Letter to JavaScript Leaders Regarding Semicolons", traduzido:

[Depender de inserção automática de ponto-e-vírgula] é algo bem seguro, e é perfeitamente válido, de forma que qualquer navegador entende. Compilador Closure, yuicompressos, packer e jsmin... todos conseguem minificar sem problemas. Não há impacto de performance.

Lamento que ao invés de educar, os líderes da comunidade dessa linguagem mentem pra você, te deixam com medo. Isso é vergonhoso. Eu recomendo aprender como declarações no JS são terminadas (e em que caso elas não são terminadas), para que você possa escrever os códigos que acha bonito.

De forma geral, \n termina uma declaração a menos que:

  1. A declaração possua um parêntese que não foi fechado, um array literal ou um objeto literal, ou termina de alguma outra forma que não seja um fim de declaração válido (por exemplo, . ou ,)
  2. A linha é apenas -- ou ++ (nesse caso vai decrementar ou incrementar o próximo token)
  3. Ela seja um for(), while(), while(), do, if(), ou else, e não possui {
  4. A próxima linha começa com [, (, +, *, /, -, ,, ., ou algum outro operador binário que só pode ser encontrado entre 2 tokens em uma única expressão.

A primeira linha é bem óbvia. Qualquer JSLint não vê problemas em \n em json e construtores "aparêntetizados", e com declarações var que se extendem por múltiplas linhas, terminado em ,; A segunda é muito esquisita. Nunca vi um caso (fora de ambientes específicos pra esse caso) onde você iria querer escrever i\n++\nj, mas pra todos os fins, isso é um i; ++j, e não i++; j.

A terceira é bem difundida, embora geralmente deixada pra lá. if (x)\ny() é equivalente a if (x) { y() }. O construtor não termina até que ache um bloco, ou uma declaração.

; é uma declaração válida, logo if(x); if(x){} ou, “se X, não faça nada". Isso é mais comum quando aplicado em loops onde a checagem do loop é a própria função de update. Incomum, mas não totalmente desconhecida.

A quarta é geralmente o que deixa a galera louca, tipo "meu deus, você precisa de ponto-e-vírgula!" Mas é bem fácil prefixar essas linhas com ponto-e-vírgula se você não quer que elas sejam continuações da linha anterior. Por exempl, ao invés disso:

foo();
[1,2,3].forEach(bar);

você pode fazer isso

foo()
;[1,2,3].forEach(bar)

A vantagem disso é que prefixos são mais fáceis de perceber, uma vez que você acostuma a nunca mias ver linhas com ( e [ sem semis.

Fim da citação de "An Open Letter to JavaScript Leaders Regarding Semicolons".