Convenzioni di denominazione JavaScript [chiuso]


257

So che ci sono molte polemiche (forse non polemiche, ma almeno argomenti) su quale convenzione di denominazione è la migliore per JavaScript.

Come si nominano variabili, funzioni, oggetti e simili?

Lascerò i miei pensieri su questo, dato che non faccio JS da molto tempo (solo un paio d'anni) e ho appena ricevuto una richiesta per creare un documento con convenzioni di denominazione da utilizzare nei nostri progetti sul lavoro . Quindi ho cercato (google-ing) in giro, e ci sono così tante opinioni diverse.

I libri che ho letto su JS usano anche diverse convenzioni di denominazione, ma sono tutti d'accordo su un po ': "Trova ciò che ti si addice e seguilo." Ma ora che ho letto così tanto in giro, ho scoperto che alcuni degli altri metodi mi piacciono un po 'meglio di quelli a cui sono abituato ora.


Una guida aggiornata alle convenzioni di denominazione di buon senso in JS: robinwieruch.de/javascript-naming-conventions
Robin Wieruch

Risposte:


202

Seguo le convenzioni sul codice di Douglas Crockford per javascript. Uso anche il suo strumento JSLint per convalidare seguendo tali convenzioni.


30
JSLint può essere troppo radicale e restrittivo per molti sviluppatori, quindi JSHint può essere una scelta migliore.
Pavel Hodek,

7
Crockford non approfondisce questo livello di dettaglio, ma per quanto riguarda le variabili che iniziano con una lettera maiuscola, perché si riferiscono ad un acronimo: la prima lettera o l'intero acronimo dovrebbero essere minuscoli? Esempio: ECBhandlevs. ecbHandle( non importa cosa significhi BCE).
Dan Dascalescu il

13
Sebbene sia un buon collegamento, non posso credere che una "risposta al collegamento" abbia così tanti voti. Potresti almeno estrarre e formattare le parti pertinenti della pagina collegata.
Adrien,

2
Penso che stia bene con il link. Se sei così preoccupato, dovresti modificare il post.
nckbrz,

4
Alzo davvero lo sguardo su Crockford ma le sue convenzioni sul codice sembrano molto obsolete. Vorrei consigliare guardando @PavelHodek rispondere più in basso nell'elenco
Per Hornshøj-Schierbeck

160

Come dice Geoff, ciò che dice Crockford è buono.

L'unica eccezione che seguo (e ho visto ampiamente usata) è usare $ varname per indicare un oggetto jQuery (o qualunque libreria). Per esempio

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

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


7
Uso anche $ per questo. Vedo spesso che le persone usano $ per indicare una copia cache di un oggetto. Ho sempre pensato che fosse un gioco di parole. cache> "cash"> $
Shawn Whinnery,

1
Questa potrebbe non essere la migliore idea se stai usando AngularJS - i servizi principali hanno il prefisso '$'
Filip Sobczak,

2
Consiglio vivamente di NON usare caratteri speciali nei nomi delle variabili. Molti framework usano $ in particolare.
nckbrz,

1
@nixxbb Va bene se giustamente si scoprono le variabili - che fanno anche i framework decenti.
Andre Figueiredo,

1
Vedo che le linee di gilda di Crockford menzionano "Non usare _ underbar come primo o ultimo carattere di un nome. A volte è inteso per indicare la privacy". Personalmente uso il underbar per indicare membri privati. Questa è una cattiva pratica? C'è un'alternativa?
Ian G,

112

Puoi seguire questa guida di stile JavaScript di Google

In generale, utilizzare functionNamesLikeThis, variabileNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis e SYMBOLIC_CONSTANTS_LIKE_THIS.

EDIT: guarda la bella collezione di guide e abbellitori di stile JavaScript .


15
Non sono sicuro di essere pienamente d'accordo, considerando che hanno sviluppato Dart e GWT (le estensioni di Chrome javascript api sono anche molto simili a java). Per alcuni team di Google, il modo migliore per sviluppare javascript potrebbe essere quello di scriverlo in un'altra lingua.
badunk,

2
Ho sempre trovato strana la convenzione di denominazione privata di Google , invece di _fooBarloro fooBar_- Microsoft ha capito bene: asp.net/ajaxlibrary/act_contribute_codingStandards.ashx
Daniel Sokolowski il

3
@DanielSokolowski Che dire di quando si usa intellisense? Se aggiungi un numero elevato di variabili con un carattere di sottolineatura, questo è solo un altro carattere che devi digitare ogni volta che accedi a tali variabili. Alla fine, la tua lista di intellisense sembra più pulita ed è solo un po 'più veloce per trovare ciò di cui hai bisogno.
FreeAsInBeer

@FreeAsInBeer è vero riguardo al personaggio in più, ma non penso che sia più veloce. Digitare _quando si fa riferimento a variabili private comporterebbe immediatamente l'intellisense limitando i risultati; alla fine pensavo fosse una preferenza personale.
Daniel Sokolowski,

1
Grazie per il collegamento all'elenco delle guide di stile. Non so se vale la pena seguire esclusivamente o come decidere ancora quale o se dovrei usare una fusione. Ma sapere dove trovarne diversi in un unico posto è un vero vantaggio.
Roger_S,

9

Una convenzione che vorrei provare è denominare i moduli statici con un prefisso "the". Controllalo. Quando uso il modulo di qualcun altro, non è facile vedere come dovrei usarlo. per esempio:

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

Sto pensando di provare una convenzione in cui i moduli statici usano "the" per indicare la loro preesistenza. Qualcuno ha visto un modo migliore di questo? Assomiglierebbe a questo:

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

6

Penso che oltre ad alcune limitazioni di sintassi; il ragionamento delle convenzioni di denominazione è molto indipendente dal linguaggio. Voglio dire, gli argomenti a favore di c_style_functions e JavaLikeCamelCase potrebbero ugualmente essere usati allo stesso modo, è solo che gli utenti del linguaggio tendono a seguire gli autori del linguaggio.

detto questo, penso che la maggior parte delle biblioteche tendano a seguire approssimativamente una semplificazione di CamelCase di Java. Trovo che i consigli di Douglas Crockford siano abbastanza raffinati per me.


2

Questa è una domanda individuale che potrebbe dipendere da come lavori. Ad alcune persone piace mettere il tipo di variabile all'inizio della variabile, come "str_message". E ad alcune persone piace usare il trattino basso tra le loro parole ("my_message") mentre ad altri piace separarle con lettere maiuscole ("myMessage").

Lavoro spesso con enormi librerie JavaScript con altre persone, quindi funzioni e variabili (eccetto le variabili private all'interno delle funzioni) iniziano con il nome del servizio per evitare conflitti, come "guestbook_message".

In breve: secondo me sono preferibili i nomi di variabili e funzioni inglesi, minuscole e ben organizzate. I nomi dovrebbero descrivere la loro esistenza piuttosto che essere brevi.


2
"così le funzioni e le variabili (eccetto le variabili private all'interno delle funzioni) hanno avuto inizio con il nome del servizio per evitare conflitti", questa affermazione non è precisa . È possibile disporre correttamente di funzioni e oggetti "spaziati" che non passano attraverso più framework javascript. C'è stata un'ottima presentazione su come ottenere questo risultato da MIX11 channel9.msdn.com/Events/MIX/MIX11/OPN08
Chris Marisic,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.