2009-05-28 20 views
215

Wiem, że istnieje wiele kontrowersji (może nie kontrowersji, ale przynajmniej argumentów), o tym, która konwencja nazw jest najlepsza dla JavaScript.Konwencje nazewnictwa JavaScript

Jak nazywasz swoje zmienne, funkcje, obiekty i tym podobne?

Zostawię moje własne przemyślenia na ten temat, ponieważ nie robiłem JS przez długi czas (tylko kilka lat), i właśnie dostałem prośbę o utworzenie dokumentu z konwencjami nazewnictwa do użycia w nasze projekty w pracy. Tak więc szukałem (google-ing) wokół i jest tak wiele różnych opinii.

Książki, które czytałem na JS, również używają różnych konwencji nazewnictwa, ale wszystkie zgadzają się co do jednego: "Znajdź to, co ci odpowiada i trzymaj się tego." Ale teraz, gdy tak dużo czytałem w okolicy, Zauważyłem, że niektóre z innych metod są lepsze od tego, do czego jestem przyzwyczajony.

+12

"zamknięte jako nie konstruktywne" - gwiazdy i przegrane nazywają "reguły" pod znakiem zapytania. – 3Dom

+2

Tak, przykręć to. Robimy to dla pracy i nie mamy czasu na "reguły". – Steven2163712

Odpowiedz

180

Podążam za Douglas Crockford's code conventions dla javascript. Używam również jego narzędzia JSLint do sprawdzania zgodności z tymi konwencjami.

+25

JSLint może być zbyt radykalny i restrykcyjny dla wielu programistów, wtedy [JSHint] (http://www.jshint.com/) może być lepszym wyborem. –

+0

Istnieje również [Online Javascript Beautifier] [1] (http://jsbeautifier.org), który wydaje się wykorzystywać wszystkie konwencje Douglasa Crockforda w celu sformatowania kodu. Nie dotyczy to jednak nazewnictwa zmiennych i funkcji. [1]: http://jsbeautifier.org –

+6

Crockford nie wchodzi w ten poziom szczegółowości, ale co z zmiennymi, które zaczynają się od dużej litery, ponieważ odnoszą się do akronimu - powinna być pierwsza litera lub cały akronim jest pisany małymi literami? Przykład: 'ECBhandle' vs.' ecbHandle' (nie ma znaczenia, co oznacza EBC). –

6

Myślę, że oprócz pewnych ograniczeń składni; Konwencje dotyczące nazewnictwa są bardzo niezależne od języka. Chodzi mi o to, że argumenty na rzecz c_style_functions i JavaLikeCamelCase mogłyby równie dobrze być użyte w odwrotny sposób, po prostu użytkownicy języka zwykle podążają za autorami języków.

powiedziawszy to, myślę, że większość bibliotek ma tendencję do z grubsza postępować zgodnie z uproszczeniem CamelCase Java. Uważam, że dla mnie jest to gustowny gust.

2

To indywidualne pytanie, które może zależeć od tego, jak pracujesz. Niektórzy ludzie lubią umieszczać typ zmiennej na początku zmiennej, np. "Str_message". Niektórzy ludzie lubią używać podkreślenia między swoimi słowami ("my_message"), podczas gdy inni lubią rozdzielać je dużymi literami ("myMessage").

Często pracuję z dużymi bibliotekami JavaScript z innymi osobami, więc funkcje i zmienne (z wyjątkiem prywatnych zmiennych wewnątrz funkcji) zaczynają się od nazwy usługi, aby uniknąć konfliktów, jak "guestbook".

W skrócie: preferowana jest angielska, dobrze zorganizowana nazwa zmiennej i funkcji, według mnie. Nazwy powinny raczej opisywać ich istnienie niż być krótkie.

+1

"więc funkcje i zmienne (z wyjątkiem prywatnych zmiennych wewnątrz funkcji) zaczęły się od nazwy usługi, aby uniknąć konfliktów," Ta instrukcja jest ** niedokładna **. Możesz poprawnie mieć funkcje "namespaced" i obiekty, które nie krwawią przez wiele struktur javascript. Była to bardzo dobra prezentacja, jak to osiągnąć z MIXa11 http://channel9.msdn.com/Events/MIX/MIX11/OPN08 –

145

Jak mówi Geoff, co jest dobre Crockford says.

Jedynym wyjątkiem, którym podążam (i szeroko widziałem), jest użycie zmiennej $ nazwa_zmiennej do wskazania obiektu jQuery (lub innej biblioteki). Na przykład.

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

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

+45

+1 To bardzo znacząca konstrukcja. –

+2

Użyłem tego również. – cori

+0

Jest to bardzo przydatny – SimplGy

91

Możesz śledzić ten Google JavaScript Style Guide

Generalnie stosowanie functionNamesLikeThis, variableNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis i SYMBOLIC_CONSTANTS_LIKE_THIS.

EDYCJA: Zobacz ładny zbiór JavaScript Style Guides And Beautifiers.

+6

+1 dla źródła Google, jeśli jest jakaś firma na tej planecie, która wie, jak zrobić "najlepszy" javascript, to musiałaby nim być. –

+14

Nie jestem pewien, czy w pełni się z tym zgadzam, biorąc pod uwagę, że opracowali Dart i GWT (rozszerzenia chrome javascript api jest również bardzo podobne do java). Niektórym zespołom w Google najlepiej jest opracować javascript w innym języku. – badunk

+2

Zawsze znajdowałem prywatną konwencję nazewnictwa Google * odd * zamiast "_fooBar" oni robią 'fooBar_' - Microsoft ma to prawo: http://www.asp.net/ajaxlibrary/act_contribute_codingStandards.ashx –

6

Jedną z konwencji, którą chciałbym wypróbować, jest nazewnictwo modułów statycznych z prefiksem "the". Sprawdź to. Kiedy używam modułu innej osoby, nie jest łatwo zobaczyć, jak mam z niego korzystać.np .:

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

Zastanawiam się nad wypróbowaniem konwencji, w której statyczne moduły używają "tego" do wskazania swojej preegzystencji. Czy ktokolwiek widział lepszą drogę niż to? Wyglądałby tak:

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