Convenções de nomenclatura JavaScript [fechadas]

257

Eu sei que há muita controvérsia (talvez não polêmica, mas argumentos pelo menos) sobre qual convenção de nomenclatura é a melhor para JavaScript.

Como você nomeia suas variáveis, funções, objetos e tal?

Vou deixar meus próprios pensamentos sobre isso, já que não pratico JS há muito tempo (apenas alguns anos) e recebi uma solicitação para criar um documento com convenções de nomenclatura a serem usadas em nossos projetos no trabalho . Então, eu tenho procurado (google-ing) ao redor, e há tantas opiniões diferentes.

Os livros que li sobre JS também usam convenções de nomenclatura diferentes, mas todos concordam um pouco: "Encontre o que mais lhe convém e atenha-se a isso". Mas agora que li muito, descobri que gosto de alguns dos outros métodos um pouco melhor do que estou acostumado agora.

peirix
fonte
Um guia atualizado para as convenções de nomenclatura de senso comum em JS: robinwieruch.de/javascript-naming-conventions
Robin Wieruch

Respostas:

202

Eu sigo convenções de código de Douglas Crockford para JavaScript. Eu também uso sua ferramenta JSLint para validar seguindo essas convenções.

Geoff
fonte
30
O JSLint pode ser muito radical e restritivo para muitos desenvolvedores; o JSHint pode ser uma escolha melhor.
Pavel Hodek
7
Crockford não entra nesse nível de detalhe, mas e as variáveis ​​que começam com uma letra maiúscula, porque se referem a um acrônimo - a primeira letra ou todo o acrônimo deve estar em minúsculas? Exemplo: ECBhandlevs. ecbHandle( não importa o que significa BCE).
Dan Dascalescu
13
Embora seja um bom link, não acredito que uma "resposta de link" tenha tantos votos. Você pode pelo menos extrair e formatar as partes relevantes da página vinculada.
Adrien Seja
2
Eu acho que ele está indo bem com o link. Se você está preocupado, edite a postagem.
Nckbrz 12/12/14
4
Eu realmente admiro Crockford, mas suas convenções de código parecem muito desatualizadas. Eu aconselharia olhando resposta @PavelHodek mais abaixo na lista
Per Hornshøj-Schierbeck
160

Como Geoff diz, o que Crockford diz é bom.

A única exceção que sigo (e já vi amplamente usada) é usar $ varname para indicar um objeto jQuery (ou qualquer biblioteca). Por exemplo

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

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

Deebster
fonte
7
Eu uso $ para isso também. Costumo ver pessoas usando $ para indicar uma cópia em cache de um objeto. Eu sempre assumi que era jogo de palavras. cache> "cash"> $
Shawn Whinnery
1
Isto pode não ser a melhor idéia se você estiver usando AngularJS - serviços essenciais são prefixados com '$'
Filip Sobczak
2
Eu recomendo NÃO usar caracteres especiais em nomes de variáveis. Muitas estruturas usam $ especialmente.
Nckbrz 12/12/14
1
@nixxbb Tudo bem se você escopo corretamente as variáveis ​​- que estruturas decentes também fazem.
Andre Figueiredo
1
Vejo as guildelines de Crockford mencionar "Não use _ underbar como o primeiro ou o último caractere de um nome. Às vezes, ele pretende indicar privacidade". Eu pessoalmente uso o underbar para indicar membros privados. Isso é uma prática ruim? Existe uma alternativa?
23818 Ian G
112

Você pode seguir este Guia de estilo do Google JavaScript

Em geral, use functionNamesLikeThis, variableNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis e SYMBOLIC_CONSTANTS_LIKE_THIS.

EDIT: Veja uma bela coleção de Guias e Embelezadores de Estilo JavaScript .

Pavel Hodek
fonte
15
Não tenho certeza se concordo plenamente com isso, considerando que eles desenvolveram Dart e GWT (as extensões javascript api do chrome também são muito parecidas com java). Para algumas equipes do Google, a melhor maneira de desenvolver o javascript pode ser escrevê-lo em outro idioma.
badunk 10/09/12
2
Eu sempre achei convenção de nomenclatura privado do Google estranha , em vez de _fooBareles fazem fooBar_- Microsoft tem razão: asp.net/ajaxlibrary/act_contribute_codingStandards.ashx
Daniel Sokolowski
3
@DanielSokolowski E quanto ao uso do intellisense? Se você prefixar um grande número de variáveis ​​com um sublinhado, esse é apenas outro caractere que você deve digitar toda vez que acessar essas variáveis. Com ela no final, sua lista de inteligência parece mais limpa e é um pouco mais rápida para encontrar o que você precisa.
FreeAsInBeer
@FreeAsInBeer é verdade sobre o personagem extra, mas não acho que seja mais rápido. Digitar _ao fazer referência a vars particulares resultaria no intellisense imediatamente limitando os resultados; no final, pensei que fosse uma preferência pessoal.
Daniel Sokolowski
1
Obrigado por criar um link para a lista de guias de estilo. Não sei se vale a pena seguir exclusivamente ou como decidir ainda qual deles ou se devo usar uma amálgama. Mas saber onde encontrar vários em um só lugar é um benefício real.
`` #
9

Uma convenção que eu gostaria de experimentar é nomear módulos estáticos com um prefixo 'the'. Veja isso. Quando uso o módulo de outra pessoa, não é fácil ver como devo usá-lo. por exemplo:

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

Estou pensando em tentar uma convenção em que os módulos estáticos usem 'the' para indicar sua pré-existência. Alguém viu uma maneira melhor do que isso? Ficaria assim:

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

Eu acho que além de algumas limitações de sintaxe; o raciocínio das convenções de nomenclatura é muito independente da linguagem. Quero dizer, os argumentos a favor de c_style_functions e JavaLikeCamelCase poderiam igualmente ser usados ​​da maneira oposta, é apenas que os usuários da linguagem tendem a seguir os autores da linguagem.

Dito isto, acho que a maioria das bibliotecas costuma seguir uma simplificação do CamelCase do Java. Encontro conselhos de Douglas Crockford de bom gosto para mim.

Javier
fonte
2

Essa é uma pergunta individual que pode depender de como você está trabalhando. Algumas pessoas gostam de colocar o tipo de variável no início da variável, como "str_message". E algumas pessoas gostam de usar sublinhado entre suas palavras ("minha_mensagem"), enquanto outras gostam de separá-las com letras maiúsculas ("minhaMessagem").

Costumo trabalhar com grandes bibliotecas JavaScript com outras pessoas, portanto, funções e variáveis ​​(exceto as variáveis ​​privadas dentro das funções) começaram com o nome do serviço para evitar conflitos, como "guestbook_message".

Em resumo: nomes de variáveis ​​e funções em minúsculas e bem organizadas em inglês são preferíveis, de acordo comigo. Os nomes devem descrever sua existência em vez de serem curtos.

Ivar
fonte
2
"portanto, funções e variáveis ​​(exceto as variáveis ​​privadas dentro das funções) começaram com o nome do serviço para evitar conflitos", esta declaração é imprecisa . Você pode ter corretamente funções e objetos "namespaced" que não sangram através de várias estruturas javascript. Houve uma muito boa apresentação sobre como conseguir isso de MIX11 channel9.msdn.com/Events/MIX/MIX11/OPN08
Chris Marisic