JavaScript adlandırma kuralları [kapalı]


257

JavaScript için en iyi adlandırma kuralı hakkında bir çok tartışma (belki de tartışma değil, en azından argümanlar) olduğunu biliyorum.

Değişkenlerinizi, fonksiyonlarınızı, nesnelerinizi ve benzerlerini nasıl adlandırıyorsunuz?

JS'yi uzun süredir (sadece birkaç yıldır) yapmadığım için kendi düşüncelerimi bunun dışında bırakacağım ve işteki projelerimizde kullanılacak adlandırma kurallarıyla bir belge oluşturma isteğim var . Bu yüzden etrafa bakıyordum (google-ing) ve çok farklı görüşler var.

JS'de okuduğum kitaplar da farklı adlandırma kuralları kullanıyor, ancak hepsi bir parça üzerinde anlaşıyorlar: “Size uygun olanı bulun ve ona sadık kalın.” Ama şimdi çok fazla okuduğum için, diğer yöntemlerden bazılarını şimdiye kadar kullandığımdan biraz daha iyi bulduğumu fark ettim.


Yanıtlar:


202

Takip ettiğim Douglas Crockford kod kurallarına javascript için. Ben de bu kuralları takip etmek için onun JSLint aracını kullanın.


30
JSLint birçok geliştirici için çok radikal ve kısıtlayıcı olabilir , o zaman JSHint daha iyi bir seçim olabilir.
Pavel Hodek

7
Crockford bu ayrıntı düzeyine girmez, ancak büyük harfle başlayan değişkenler ne olur, çünkü bir kısaltmaya atıfta bulunurlar - ilk harf mi yoksa tüm kısaltma küçük harfle mi yazılmalıdır? Örnek: ECBhandlevs. ecbHandle( ECB'nin ne anlama geldiği önemli değildir ).
Dan Dascalescu

13
İyi bir bağlantı olmasına rağmen, "bağlantı yanıtı" nın çok oyu olduğuna inanamıyorum. Bağlantılı sayfanın ilgili bölümlerini en azından çıkarabilir ve biçimlendirebilirsiniz.
Adrien Be

2
Bence bağlantıyla iyi gidiyor. Eğer çok endişe duyuyorsanız, yazıyı düzenlemelisiniz.
nckbrz

4
Gerçekten Crockford için bakmak ama onun kod kuralları çok eski görünüyor. Listede daha @PavelHodek cevap bakarak tavsiye ediyorum
Per Hornshøj-Schierbeck

160

Geoff'un dediği gibi Crockford'un söyledikleri iyi.

Takip ettiğim (ve yaygın olarak kullandığım) tek istisna, jQuery (veya herhangi bir kitaplık) nesnesini belirtmek için $ varname kullanmaktır. Örneğin

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

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


7
Ben de bunun için $ kullanın. İnsanların genellikle bir nesnenin önbelleğe alınmış bir kopyasını belirtmek için $ kullandığını görüyorum. Her zaman kelimeler üzerinde oynamak olduğunu varsaydım. önbellek> "nakit"> $
Shawn Whinnery

1
AngularJS kullanıyorsanız bu iyi bir fikir olmayabilir - temel hizmetlerin önüne '$' gelir
Filip Sobczak

2
Değişken adlarında özel karakterler kullanmamanızı şiddetle tavsiye ederim. Birçok çerçeve özellikle $ kullanır.
nckbrz

1
@nixxbb Değişkenleri doğru şekilde kapsamanız iyi olur - hangi iyi çerçeveler de yapar.
Andre Figueiredo

1
Crockford'un guildelines'inde "Bir adın ilk veya son karakteri olarak _ underbar kullanmayın. Bazen mahremiyeti göstermesi amaçlanır" ifadesini görüyorum. Şahsen özel üyeleri belirtmek için underbar kullanıyorum. Bu kötü bir uygulama mı? Bir alternatif var mı?
Ian G

112

Bu Google JavaScript Stil Kılavuzunu takip edebilirsiniz

Genel olarak, functionNamesLikeThis, variableNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis ve SYMBOLIC_CONSTANTS_LIKE_THIS işlevlerini kullanın.

EDIT: JavaScript Stil Kılavuzları ve Güzelleştiriciler güzel bir koleksiyon bakın .


15
Dart ve GWT'yi (krom uzantıları javascript api de çok java benzeri) geliştirdikleri göz önüne alındığında, buna tamamen katılıyorum. Google'daki bazı ekipler için javascript geliştirmenin en iyi yolu onu başka bir dilde yazmak olabilir.
badunk

2
Google'ın özel adlandırma kuralını her zaman garip buldum , _fooBaronlar yerine fooBar_- Microsoft doğru anladı
Daniel Sokolowski

3
@DanielSokolowski Intellisense kullanırken ne olacak? Alt çizgi ile çok sayıda değişkenin önekini kullanırsanız, bu değişkenlere her eriştiğinizde yazmanız gereken başka bir karakterdir. Sonunda, intellisense listeniz daha temiz görünüyor ve ihtiyacınız olanı bulmak biraz daha hızlı.
FreeAsInBeer

@FreeAsInBeer ekstra karakter hakkında gerçek ama daha hızlı olduğunu sanmıyorum. _Özel değişkenlere atıfta bulunulduğunda yazmak , sonuçların hemen sınırlandırılmasıyla sonuçlanır; sonunda kişisel tercih olduğunu düşündüm.
Daniel Sokolowski

1
Stil kılavuzları listesine bağladığınız için teşekkür ederiz. Birinin münhasıran izlemeye değer olup olmadığını veya hangisine karar vereceğimi veya bir birleşmeyi kullanmam gerekip gerekmediğini bilmiyorum. Ama bir yerde birkaç tane nerede bulacağınızı bilmek gerçek bir nimet.
Roger_S

9

Denemek istediğim bir kural, statik modülleri 'the' önekiyle adlandırmaktır. Şuna bir bak. Başka birinin modülünü kullandığımda, onu nasıl kullanmam gerektiğini görmek kolay değil. Örneğin:

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

Statik modüllerin 'pre' varlığını belirtmek için kullandıkları bir konvansiyonu denemeyi düşünüyorum. Bundan daha iyi bir yol gören var mı? Şöyle görünür:

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

6

Bazı sözdizimi sınırlamalarının yanı sıra; adlandırma kuralları muhakemesi dilden çok bağımsızdır. Yani, c_style_functions ve JavaLikeCamelCase lehine argümanlar aynı şekilde iyi bir şekilde kullanılabilir, sadece dil kullanıcıları dil yazarlarını takip etme eğilimindedir.

Söyledikten, çoğu kütüphane kabaca Java CamelCase basitleştirme takip eğilimindedir düşünüyorum. Douglas Crockford'un tavsiyelerini benim için yeterince zevkli buluyorum .


2

Bu, nasıl çalıştığınıza bağlı olabilecek bireysel bir soru. Bazı insanlar değişken türünü "str_message" gibi değişkenin başına koymayı sever. Bazıları ise kelimeleri arasında alt çizgi kullanmayı ("my_message"), bazıları ise büyük harflerle ("myMessage") ayırmayı sever.

Sık sık diğer insanlarla büyük JavaScript kütüphaneleri ile çalışıyorum, bu yüzden işlevler ve değişkenler (işlevler içindeki özel değişkenler hariç) "guestbook_message" olarak çakışmaları önlemek için hizmetin adıyla başlamak zorunda.

Kısacası: bana göre ingilizce, alt kasalı, iyi organize edilmiş değişken ve fonksiyon isimleri tercih edilir. İsimler, kısa olmak yerine varlıklarını tarif etmelidir.


2
"böylece işlevler ve değişkenler (işlevler içindeki özel değişkenler hariç) çakışmayı önlemek için hizmetin adıyla başlamalıdır," Bu ifade yanlıştır . Birden çok javascript çerçevesinden kanamayan "ad boşluklu" işlevlere ve nesnelere doğru şekilde sahip olabilirsiniz. MIX11 channel9.msdn.com/Events/MIX/MIX11/OPN08
Chris Marisic 25:11
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.