Konwencje nazewnictwa JavaScript [zamknięte]


257

Wiem, że istnieje wiele kontrowersji (może nie kontrowersji, ale przynajmniej argumentów) na temat tego, która konwencja nazewnictwa jest najlepsza dla JavaScript.

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

Zostawię swoje przemyślenia na ten temat, ponieważ nie robiłem JS od dłuższego czasu (tylko kilka lat), i właśnie dostałem prośbę o utworzenie dokumentu z konwencjami nazewnictwa, który będzie używany w naszych projektach w pracy . Rozglądałem się (google), a jest tak wiele różnych opinii.

Książki, które czytałem na temat JS, również same używają różnych konwencji nazewnictwa, ale wszystkie zgadzają się co do jednego: „Znajdź to, co ci odpowiada, i trzymaj się tego”. Ale teraz, kiedy tak dużo czytałem, odkryłem, że podoba mi się niektóre inne metody nieco lepiej niż to, do czego jestem przyzwyczajony.


Odpowiedzi:


202

Postępuję zgodnie z konwencjami kodu Douglasa Crockforda dla javascript. Korzystam również z jego narzędzia JSLint do sprawdzania poprawności tych konwencji.


30
JSLint może być zbyt radykalny i restrykcyjny dla wielu programistów, wtedy JSHint może być lepszym wyborem.
Pavel Hodek

7
Crockford nie wchodzi w ten poziom szczegółowości, ale co ze zmiennymi, które zaczynają się od dużej litery, ponieważ odnoszą się do akronimu - czy pierwsza litera czy cały akronim powinny być małe? Przykład: ECBhandlevs. ecbHandle(nie ma znaczenia, co oznacza EBC).
Dan Dascalescu,

13
Chociaż jest to dobry link, nie mogę uwierzyć, że „odpowiedź na link” ma tyle głosów. Możesz przynajmniej wyodrębnić i sformatować odpowiednie części połączonej strony.
Adrien Be

2
Myślę, że ma się dobrze z linkiem. Jeśli jesteś tak zaniepokojony, powinieneś edytować post.
nckbrz

4
Naprawdę patrzę na Crockforda, ale jego konwencje kodu wydają się bardzo nieaktualne. Radziłbym spojrzeć na odpowiedź @PavelHodek w dalszej części listy
Per Hornshøj-Schierbeck

160

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

Jedynym wyjątkiem, którego przestrzegam (i widziałem powszechnie używane), jest użycie $ varname do wskazania obiektu jQuery (lub dowolnej biblioteki). Na przykład

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

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


7
Do tego też używam $. Często widzę, że ludzie używają $, aby wskazać buforowaną kopię obiektu. Zawsze zakładałem, że to gra słów. pamięć podręczna> „gotówka”> $
Shawn Whinnery

1
To może nie być najlepszy pomysł, jeśli używasz AngularJS - podstawowe usługi mają prefiks „$”
Filip Sobczak

2
Bardzo polecam NIE używanie znaków specjalnych w nazwach zmiennych. Wiele ram używa szczególnie $.
nckbrz

1
@nixxbb W porządku, jeśli słusznie określasz zmienne - co również porządne ramy.
Andre Figueiredo,

1
Widzę, że gildie Crockforda wspominają: „Nie używaj _ underbar jako pierwszej lub ostatniej postaci imienia. Czasami ma to oznaczać prywatność”. Osobiście używam podbicia, aby wskazać członków prywatnych. Czy to zła praktyka? Czy jest alternatywa?
Ian G

112

Możesz postępować zgodnie z tym przewodnikiem po stylu Google JavaScript

Zasadniczo używaj functionNamesLikeThis, variableNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis i SYMBOLIC_CONSTANTS_LIKE_THIS.

EDYCJA: Zobacz ładną kolekcję Przewodników i upiększaczy w stylu JavaScript .


15
Nie jestem pewien, czy w pełni się z tym zgadzam, biorąc pod uwagę, że opracowali Dart i GWT (rozszerzenia Java JavaScript api są również bardzo podobne do Java). Dla niektórych zespołów w Google najlepszym sposobem opracowania javascript może być napisanie go w innym języku.
badunk

2
Zawsze uważałem prywatną konwencję nazewnictwa Google za dziwną , zamiast _fooBartego fooBar_- Microsoft ma rację: asp.net/ajaxlibrary/act_contribute_codingStandards.ashx
Daniel Sokolowski

3
@DanielSokolowski A co z korzystaniem z Intellisense? Jeśli poprzedzasz dużą liczbę zmiennych znakiem podkreślenia, to jest to po prostu kolejny znak, który musisz wpisać za każdym razem, gdy uzyskujesz dostęp do tych zmiennych. Dzięki temu na końcu twoja lista intellisense wygląda na czystszą, a znalezienie czegoś, czego potrzebujesz, jest nieco szybsze.
FreeAsInBeer

@FreeAsInBeer prawda o dodatkowej postaci, ale nie sądzę, żeby była szybsza. Pisanie _podczas odwoływania się do prywatnych warów spowoduje natychmiastowe ograniczenie inteligencji przez inteligencję; w końcu pomyślał, że to osobiste preferencje.
Daniel Sokołowski

1
Dziękujemy za link do listy przewodników po stylach. Nie wiem, czy warto podążać wyłącznie, czy jak zdecydować, który z nich, czy też powinienem skorzystać z połączenia. Ale wiedza, gdzie znaleźć kilka w jednym miejscu, jest prawdziwym dobrodziejstwem.
Roger_S,

9

Jedną z konwencji, którą chciałbym wypróbować, jest nadawanie modułom statycznym prefiksu „the”. Sprawdź to. Kiedy korzystam z modułu innej osoby, nie jest łatwo zobaczyć, jak mam go używać. na przykład:

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 moduły statyczne używają „the”, aby wskazać swoją preegzystencję. Czy ktoś widział lepszy sposób niż ten? Wyglądałby tak:

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

6

Myślę, że oprócz pewnych ograniczeń składniowych; rozumowanie konwencji nazewnictwa jest w dużej mierze niezależne od języka. Mam na myśli, że argumenty na korzyść c_style_functions i JavaLikeCamelCase mogą równie dobrze być użyte w odwrotny sposób, tylko użytkownicy języka mają tendencję do podążania za autorami języka.

Powiedziawszy to, myślę, że większość bibliotek dąży do uproszczenia CamelCase w Javie. Uważam, że porady Douglasa Crockforda są dla mnie wystarczająco smaczne.


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, na przykład „str_message”. A niektórzy ludzie lubią używać podkreślnika między swoimi słowami („my_message”), podczas gdy inni lubią je rozdzielać dużymi literami („myMessage”).

Często pracuję z ogromnymi bibliotekami JavaScript z innymi ludźmi, więc funkcje i zmienne (oprócz zmiennych prywatnych w funkcjach) zaczęły się od nazwy usługi, aby uniknąć konfliktów, jako „guestbook_message”.

W skrócie: według mnie preferowane są angielskie, małe litery, dobrze zorganizowane nazwy zmiennych i funkcji. Nazwy powinny opisywać ich istnienie, a nie być krótkie.


2
„więc funkcje i zmienne (z wyjątkiem zmiennych prywatnych w funkcjach) musiały zaczynać się od nazwy usługi, aby uniknąć konfliktów”, to stwierdzenie jest niedokładne . Możesz poprawnie mieć funkcje „przestrzeni nazw” i obiekty, które nie krwawią przez wiele frameworków javascript. Bardzo dobra prezentacja na temat tego, jak to osiągnąć, pochodzi z kanału MIX11 channel9.msdn.com/Events/MIX/MIX11/OPN08
Chris
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.