Konvensi penamaan JavaScript [ditutup]

257

Saya tahu ada banyak kontroversi (mungkin bukan kontroversi, tetapi setidaknya argumen) tentang konvensi penamaan mana yang terbaik untuk JavaScript.

Bagaimana Anda memberi nama variabel, fungsi, objek, dan semacamnya?

Saya akan meninggalkan pemikiran saya sendiri tentang hal ini, karena saya belum pernah melakukan JS untuk waktu yang lama (hanya beberapa tahun), dan saya baru saja mendapat permintaan untuk membuat dokumen dengan konvensi penamaan yang akan digunakan dalam proyek-proyek kami di tempat kerja . Jadi saya sudah mencari (google-ing) di sekitar, dan ada begitu banyak pendapat berbeda.

Buku-buku yang saya baca di JS juga menggunakan konvensi penamaan yang berbeda, tetapi mereka semua setuju sedikit: "Temukan yang cocok untuk Anda, dan patuhi itu." Tetapi sekarang setelah saya membaca begitu banyak, saya menemukan bahwa saya menyukai beberapa metode lain yang sedikit lebih baik daripada yang saya gunakan sekarang.

peirix
sumber
Panduan mutakhir untuk akal sehat Konvensi Penamaan di JS: robinwieruch.de/javascript-naming-conventions
Robin Wieruch

Jawaban:

202

Saya mengikuti konvensi kode Douglas Crockford untuk javascript. Saya juga menggunakan alat JSLint untuk memvalidasi mengikuti konvensi tersebut.

Geoff
sumber
30
JSLint bisa terlalu radikal dan membatasi bagi banyak pengembang, maka JSHint bisa menjadi pilihan yang lebih baik.
Pavel Hodek
7
Crockford tidak masuk ke tingkat perincian ini, tetapi bagaimana dengan variabel yang dimulai dengan huruf kapital, karena merujuk pada akronim - haruskah huruf pertama, atau seluruh akronim diturunkan menjadi lebih kecil? Contoh: ECBhandlevs. ecbHandle( tidak peduli apa artinya ECB).
Dan Dascalescu
13
Meskipun ini adalah tautan yang bagus, saya tidak percaya "tautan jawaban" memiliki begitu banyak suara. Anda setidaknya dapat mengekstrak & memformat bagian yang relevan dari halaman yang ditautkan.
Adrien Be
2
Saya pikir dia baik-baik saja dengan tautannya. Jika Anda sangat khawatir, Anda harus mengedit posting.
nckbrz
4
Saya benar-benar memandang Crockford tetapi konvensi kodenya tampak sangat ketinggalan jaman. Saya akan menyarankan melihat @ PavelHodek menjawab lebih jauh ke bawah daftar
Per Hornshøj-Schierbeck
160

Seperti kata Geoff, apa yang dikatakan Crockford itu baik.

Satu-satunya pengecualian yang saya ikuti (dan telah banyak digunakan) adalah menggunakan $ varname untuk menunjukkan objek jQuery (atau perpustakaan apa pun). Misalnya

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

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

Deebster
sumber
7
Saya menggunakan $ untuk ini juga. Saya sering melihat orang menggunakan $ untuk menunjukkan salinan objek yang di-cache. Saya selalu menganggap itu bermain kata-kata. cache> "cash"> $
Shawn Whinnery
1
Ini mungkin bukan ide terbaik jika Anda menggunakan AngularJS - layanan inti diawali dengan '$'
Filip Sobczak
2
Saya sangat merekomendasikan TIDAK menggunakan karakter khusus dalam nama variabel. Banyak framework menggunakan $ terutama.
nckbrz
1
@ nixxbb Tidak apa-apa jika Anda benar variabel ruang lingkup - yang kerangka kerja yang layak juga.
Andre Figueiredo
1
Saya melihat guildeline Crockford menyebutkan "Jangan gunakan _ underbar sebagai karakter pertama atau terakhir dari sebuah nama. Kadang-kadang dimaksudkan untuk menunjukkan privasi". Saya pribadi menggunakan underbar untuk menunjukkan anggota pribadi. Apakah ini praktik buruk? Apakah ada alternatif?
Ian G
112

Anda dapat mengikuti Panduan Gaya Google JavaScript ini

Secara umum, gunakan functionNamesLikeThis, variableNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis, dan SYMBOLIC_CONSTANTS_LIKE_THIS.

EDIT: Lihat koleksi bagus Panduan Gaya dan Penampil JavaScript .

Pavel Hodek
sumber
15
Saya tidak yakin apakah saya sepenuhnya setuju dengan itu, mengingat bahwa mereka mengembangkan Dart dan GWT (api ekstensi javascript chrome juga sangat mirip java). Untuk beberapa tim di Google, cara terbaik untuk mengembangkan javascript mungkin dengan menulisnya dalam bahasa lain.
badunk
2
Saya selalu menemukan konvensi penamaan pribadi Google aneh , alih-alih _fooBarmereka melakukannya fooBar_- Microsoft melakukannya dengan benar: asp.net/ajaxlibrary/act_contribute_codingStandards.ashx
Daniel Sokolowski
3
@DanielSokolowski Bagaimana dengan menggunakan intellisense? Jika Anda awalan sejumlah besar variabel dengan garis bawah, maka itu hanya karakter lain yang harus Anda ketik setiap kali Anda mengakses variabel tersebut. Dengan itu pada akhirnya, daftar intellisense Anda terlihat lebih bersih dan hanya sedikit lebih cepat untuk menemukan apa yang Anda butuhkan.
FreeAsInBeer
@FreeAsInBeer benar tentang karakter tambahan tapi saya tidak berpikir lebih cepat. Mengetik _saat referensi vars pribadi akan menghasilkan intellisense segera membatasi hasil; pada akhirnya berpikir itu adalah preferensi pribadi.
Daniel Sokolowski
1
Terima kasih telah menautkan ke daftar panduan gaya. Saya tidak tahu apakah ada yang pantas diikuti secara eksklusif atau bagaimana memutuskan yang mana atau apakah saya harus menggunakan penggabungan. Tetapi mengetahui di mana menemukan beberapa di satu tempat adalah keuntungan yang nyata.
Roger_S
9

Satu konvensi yang ingin saya coba adalah memberi nama modul statis dengan awalan 'the'. Lihat ini. Ketika saya menggunakan modul orang lain, tidak mudah untuk melihat bagaimana saya seharusnya menggunakannya. misalnya:

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

Saya sedang berpikir tentang mencoba konvensi di mana modul statis menggunakan 'the' untuk menunjukkan keberadaan mereka sebelumnya. Adakah yang melihat cara yang lebih baik dari ini? Akan terlihat seperti ini:

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

Saya pikir selain beberapa batasan sintaksis; alasan penamaan konvensi sangat banyak bahasa independen. Maksud saya, argumen yang mendukung c_style_functions dan JavaLikeCamelCase juga bisa digunakan dengan cara yang berlawanan, hanya saja pengguna bahasa cenderung mengikuti penulis bahasa.

karena itu, saya pikir sebagian besar perpustakaan cenderung mengikuti penyederhanaan CamelCase Java. Saya menemukan nasihat Douglas Crockford cukup enak bagi saya.

Javier
sumber
2

Itu pertanyaan individual yang bisa bergantung pada cara Anda bekerja. Beberapa orang suka meletakkan tipe variabel di awal variabel, seperti "str_message". Dan beberapa orang suka menggunakan garis bawah di antara kata-kata mereka ("my_message") sementara yang lain suka memisahkannya dengan huruf besar ("myMessage").

Saya sering bekerja dengan pustaka JavaScript besar dengan orang lain, jadi fungsi dan variabel (kecuali variabel pribadi di dalam fungsi) harus mulai dengan nama layanan untuk menghindari konflik, seperti "guestbook_message".

Singkatnya: menurut saya, bahasa Inggris, huruf yang lebih rendah, variabel yang terorganisir dengan baik dan fungsi lebih baik. Nama-nama harus menggambarkan keberadaan mereka daripada pendek.

Ivar
sumber
2
"jadi fungsi dan variabel (kecuali variabel pribadi di dalam fungsi) harus mulai dengan nama layanan untuk menghindari konflik," Pernyataan ini tidak akurat . Anda dapat memiliki fungsi dan objek "namespaced" dengan benar yang tidak berdarah melalui beberapa kerangka kerja javascript. Ada presentasi yang sangat bagus tentang bagaimana mencapai ini dari MIX11 channel9.msdn.com/Events/MIX/MIX11/OPN08
Chris Marisic