Kata pengantar
Keuntungan dari kebiasaan menulis JavaScript yang baik terbukti dengan sendirinya. Hari ini, Bin Go merekomendasikan spesifikasi pemrograman Dojo JavaScript untuk Anda, yang merupakan spesifikasi gaya pemrograman javascript yang cukup baik. Dianjurkan agar Anda belajar dari spesifikasi ini untuk menulis JavaScript. Terima kasih kepada I.Feelinglucky untuk terjemahannya.
urutan
Kekerasan apa pun terhadap panduan ini diizinkan jika meningkatkan keterbacaan.
Semua kode harus mudah dibaca orang lain.
Referensi Baca Cepat
Core API Harap gunakan gaya berikut:
| struktur | aturan | Komentar |
| Modul | huruf kecil | Jangan gunakan beberapa semantik (tidak pernah banyak kata) |
| baik | unta | |
| Metode publik | mencampur | Panggilan eksternal lainnya juga dapat menggunakan lower_case (), dengan gaya ini |
| Variabel publik | mencampur | |
| konstan | Unta atau modal |
Meskipun berikut ini tidak perlu, disarankan untuk menggunakan:
| struktur | aturan |
| Metode pribadi | Campuran, Contoh: _MixedCase |
| Variabel pribadi | Campuran, Contoh: _MixedCase |
| Parameter metode | Campuran, contoh: _mixedcase, campuran |
| Variabel lokal | Campuran, contoh: _mixedcase, campuran |
Spesifikasi penamaan
1. Nama variabel harus berupa huruf kecil.
2. Penamaan kelas menggunakan aturan penamaan unta, seperti:
Akun, EventHandler
3. Konstanta harus dinyatakan di bagian depan suatu objek (kelas) atau variabel enumerasi. Penamaan variabel enumerasi harus memiliki signifikansi praktis, dan anggotanya harus menggunakan aturan penamaan unta atau memanfaatkan:
Salinan kode adalah sebagai berikut:
var nodetypes = {
Elemen: 1,
Dokumen: 2
}
4. Kata -kata yang disingkat tidak dapat menggunakan nama modal sebagai nama variabel:
getInnerHtml (), getxml (), xmldocument
5. Perintah metode harus berupa kata kerja atau frasa kata kerja:
obj.getsomevalue ()
6. Penamaan kelas publik harus dinamai menggunakan nama campuran (campuran).
7. Nama variabel CSS harus menggunakan variabel kelas publik yang sama.
8. Anggota atribut variabel dari kelas pribadi harus dinamai dengan nama campuran (campuran) dan digarisbawahi (_). Misalnya:
Salinan kode adalah sebagai berikut:
var myclass = function () {
var _buffer;
this.dosomething = function () {
};
}
9. Jika variabel diatur ke pribadi, itu harus digarisbawahi sebelumnya.
this._someprivateVariable = pernyataan;
10. Variabel umum harus menggunakan nama jenis yang konsisten dengan namanya:
Settopic (topik) // Topik Variabel adalah variabel tipe topik
11. Semua nama variabel harus menggunakan nama bahasa Inggris.
12. Jika suatu variabel memiliki ruang lingkup yang luas (ruang lingkup besar), variabel global harus digunakan; Pada saat ini, itu dapat dirancang sebagai anggota kelas. Jika ruang lingkup relatifnya lebih kecil atau variabel pribadi, gunakan kata -kata singkat untuk dinamai.
13. Jika suatu variabel memiliki nilai pengembalian implisit, hindari menggunakan metode yang sama:
getHandler (); // hindari menggunakan geteventhandler ()
14. Variabel publik harus dengan jelas mengekspresikan atribut mereka sendiri untuk menghindari ambiguitas dalam makna, seperti:
MouseEventhandler
, bukan mseevthdlr.
Harap perhatikan ketentuan ini lagi, manfaat dari melakukannya sangat jelas. Ini dapat dengan jelas mengekspresikan makna yang ditentukan oleh ekspresi. Misalnya:
dojo.events.mouse.handler // bukannya dojo.events.mouse.mouseeventhandler
15. Kelas/Konstruktor dapat dinamai menggunakan nama yang memperluas kelas dasarnya, sehingga nama kelas dasarnya dapat ditemukan dengan benar dan dengan cepat:
EventHandler
Uieventhandler
MouseEventhandler
Kelas dasar dapat mengurangi penamaannya sambil dengan jelas menggambarkan propertinya:
MouseEventhandler sebagai lawan dari MouseUieventhandler.
Spesifikasi Penamaan Khusus
Istilah "Get/Set" tidak boleh ditautkan ke bidang kecuali didefinisikan sebagai variabel pribadi.
Nama variabel yang didahului oleh "adalah" harus menjadi nilai boolean, dan dapat menjadi "memiliki", "can" atau "harus".
Istilah "komputasi" karena nama variabel harus berupa variabel yang telah dihitung.
Istilah "temukan" karena nama variabel harus berupa variabel yang telah ditemukan selesai.
Istilah "diinisialisasi" atau "init" karena nama variabel harus merupakan kelas atau jenis variabel lain yang telah dipakai (diinisialisasi).
Variabel kontrol UI (antarmuka pengguna) harus diikuti oleh nama jenis kontrol, misalnya: LeftComboBox, TopsCrollPane.
Nomor jamak harus memiliki Konvensi Nama Umum (Teks Asli: Bentuk Plural harus digunakan untuk memberi nama koleksi).
Nama variabel yang dimulai dengan "num" atau "count" secara konvensional numerik (objek).
Variabel berulang disarankan untuk menggunakan variabel dengan nama seperti "i", "j", "k" (dan seterusnya).
Istilah tambahan harus menggunakan kata -kata tambahan, seperti: dapatkan/atur, tambahkan/hapus, buat/hancurkan, mulai/berhenti, masukkan/hapus, mulai/akhir, dll.
Cobalah untuk menggunakan singkatan jika memungkinkan.
Hindari ambiguitas nama variabel boolean, misalnya:
isNoterror, isNotfound ilegal
Kelas kesalahan merekomendasikan penambahan "pengecualian" atau "kesalahan" ke nama variabel.
Jika suatu metode mengembalikan kelas, itu harus menunjukkan apa yang dikembalikan pada namanya; Jika itu adalah proses, itu harus menunjukkan apa yang dilakukannya.
dokumen
Harap gunakan 4 tab kosong untuk indentasi.
Jika editor Anda mendukung tag file, silakan tambahkan baris berikut untuk membuat kode kami lebih mudah dibaca:
// vim: ts = 4: noet: tw = 0:
Catatan Penerjemah: Orang asing menggunakan editor VIM lebih sering, sehingga Anda dapat memilih untuk mengikuti artikel ini.
Lipat kode harus terlihat selesai dan logis:
Salinan kode adalah sebagai berikut:
var someexpression = ekspresi1
+ Ekspresi2
+ Ekspresi3;
var o = someObject.get (
Ekspresi1,
Ekspresi2,
Ekspresi3
);
Catatan: Indentasi ekspresi harus konsisten dengan deklarasi variabel.
CATATAN: Parameter fungsi harus secara eksplisit indentasi, dan aturan lekukan konsisten dengan blok lain.
variabel
tata letak
bagian
Cuplikan kode normal seharusnya terlihat seperti ini:
Salinan kode adalah sebagai berikut:
while (! isDone) {
dosomething ();
isDone = moretodo ();
}
Pernyataan if seharusnya terlihat seperti ini:
Salinan kode adalah sebagai berikut:
if (somecondition) {
pernyataan;
} lain jika (someothercondition) {
pernyataan;
} kalau tidak {
pernyataan;
}
Pernyataan untuk terlihat seperti ini:
Salinan kode adalah sebagai berikut:
untuk (inisialisasi; kondisi; perbarui) {
pernyataan;
}
Pernyataan sementara seharusnya terlihat seperti ini:
Salinan kode adalah sebagai berikut:
while (! isDone) {
dosomething ();
isDone = moretodo ();
}
Do… pernyataan sementara seharusnya terlihat seperti ini:
Salinan kode adalah sebagai berikut:
Mengerjakan {
pernyataan;
} while (kondisi);
Pernyataan sakelar seharusnya terlihat seperti ini:
Salinan kode adalah sebagai berikut:
sakelar (kondisi) {
Kasus ABC:
pernyataan;
// Fallthrough
Kasus Def:
pernyataan;
merusak;
bawaan:
pernyataan;
merusak;
}
Coba ... pernyataan tangkapan seharusnya terlihat seperti ini:
Salinan kode adalah sebagai berikut:
mencoba {
pernyataan;
} catch (ex) {
pernyataan;
} Akhirnya {
pernyataan;
}
Single-line jika lain, sementara atau untuk pernyataan juga harus dimasukkan dalam tanda kurung, tetapi mereka dapat ditulis seperti ini:
if (kondisi) {pernyataan; }
while (kondisi) {pernyataan; }
untuk (intalization; condition; update) {pernyataan; }
kosong
Komentar
dokumen
Berikut ini memberikan beberapa fungsi dasar atau metode deskripsi objek:
Ringkasan: Deskripsi singkat tentang tujuan fungsi atau implementasi objek ini
Deskripsi: Deskripsi singkat tentang fungsi atau kelas ini
Return: Menjelaskan apa fungsi ini kembali (tidak termasuk tipe pengembalian)
Informasi fungsi dasar
Salinan kode adalah sebagai berikut:
fungsi(){
// Ringkasan: Segera kita akan memiliki harta yang cukup untuk memerintah semua New Jersey.
// Deskripsi: Atau kita bisa mendapatkan sekamar baru.
// Lihat, kamu pergi temukan dia. Dia tidak berteriak padamu.
// Yang pernah saya coba lakukan hanyalah membuatnya tersenyum dan bernyanyi
// dia dan menari di sekelilingnya dan dia hanya berbaring di dalam diri saya.
// Dia menyuruhku masuk ke dalam freezer karena ada karnaval di sana.
// Returns: Lihat, rekaman Bananarama!
}
Informasi fungsi objek
Tidak ada deskripsi nilai pengembalian
Salinan kode adalah sebagai berikut:
{
// Ringkasan: Dingle, Libatkan Mesin Pelangi!
// keterangan:
// Memberitahu Anda apa, saya berharap saya-oh g-itu balok, itu
// Muncul seperti itu, kecepatannya, Anda mungkin ingin menyesuaikannya.
// Itu benar -benar melakukan nomor di punggung saya, di sana. Maksud saya, dan saya tidak melakukannya
// Ingin mengatakan whiplash, dulu, karena itu agak terlalu jauh,
// Tapi, Anda terluka, kan?
}
Deklarasi Fungsi
Dalam beberapa kasus, panggilan dan deklarasi fungsi tidak terlihat. Dalam hal ini, kami tidak memiliki cara untuk memasukkan instruksi, dll. (Untuk panggilan program) dalam fungsi. Jika Anda menghadapi situasi ini, Anda dapat menggunakan kelas untuk merangkum fungsi tersebut.
Catatan: Metode ini hanya dapat digunakan tanpa parameter fungsi yang diinisialisasi. Jika tidak, mereka akan diabaikan.
Salinan kode adalah sebagai berikut:
dojo.declare (
"foo",
batal,
{
// Ringkasan: Fiuh, ini pasti santai, Frylock.
// keterangan:
// ribuan tahun yang lalu, sebelum fajar
// man seperti yang kami kenal dia, ada Sir Santa dari Claus: An
// kreativitas seperti kera membuat mainan kasar dan tidak berguna
// dari Dino-Bones, melemparkannya ke kreativitas seperti simpanse dengan
// Tangan berkerut terlepas dari bagaimana mereka berperilaku
// tahun sebelumnya.
// Pengembalian: Kecuali Carl membayar biaya kepada para penatua Elfin di luar angkasa.
}
);
<h3> parameter </h3>
<Ol>
<li> Jenis Sederhana
Jenis parameter sederhana dapat langsung dikomentari dan dijelaskan dalam definisi parameter fungsi.
[cc lang = "javascript"] fungsi (/*string*/ foo,/*int*/ bar) ...
Parameter tipe variabel
Berikut adalah beberapa pengubah untuk referensi:
? Parameter opsional
... kisaran parameter wajah tidak pasti
Array
fungsi (/*string?*/ foo, /*int...*/ bar,/*string []*/ baz) ...
Deskripsi Parameter Global
Jika Anda ingin menambahkan deskripsi, Anda dapat memindahkannya ke blok inisialisasi.
Format Informasi Dasar adalah: * Kunci * Bidang Deskripsi ( * Kunci * Deskripsi Kalimat)
Format parameter dan variabel adalah:*Kunci*~*Jenis*~ Bidang Deskripsi (*Kunci*~*Jenis*~ Keterangan Kalimat)
Catatan:*Kata kunci*dan ~*ketik*~ dapat diekspresikan dalam huruf dan angka apa pun.
Salinan kode adalah sebagai berikut:
fungsi (foo, bar) {
// foo: string
// digunakan untuk menjadi parameter pertama
// bar: int
// digunakan untuk menjadi parameter kedua
}
variabel
Karena deklarasi variabel instan, variabel prototipe dan variabel eksternal konsisten, ada banyak metode untuk menyatakan dan memodifikasi variabel. Definisi dan penentuan posisi spesifik harus menunjukkan nama, jenis, ruang lingkup, dan informasi lain dari variabel di lokasi pertama di mana variabel muncul.
Salinan kode adalah sebagai berikut:
fungsi foo () {
// myString: string
// kali: int
// Berapa kali mencetak myString
// Pemisah: String
// Apa yang harus dicetak di antara myString*
this.mystring = "Teks Placeholder";
this.times = 5;
}
foo.prototype.setstring = function (myString) {
this.mystring = myString;
}
foo.prototype.toString = function () {
untuk (int i = 0; i <this.times; i ++) {
dojo.debug (this.mystring);
dojo.debug (foo.separator);
}
}
foo.separator = "=====";
Komentar bervariasi di objek
Metode anotasi yang konsisten dengan nilai dan metode objek harus digunakan, seperti ketika mereka menyatakan:
Salinan kode adalah sebagai berikut:
{
// Key: String
// nilai sederhana
Kunci: "Nilai",
// Key2: String
// Nilai sederhana lainnya
}
Nilai pengembalian
Karena fungsi dapat mengembalikan beberapa nilai (tipe) yang berbeda secara bersamaan, setiap nilai pengembalian harus ditambahkan ke komentar dari jenis pengembalian. Komentar baru saja dikomentari di baris. Jika semua nilai pengembalian dari jenis yang sama, tipe yang dikembalikan ditentukan; Jika ada beberapa nilai pengembalian yang berbeda, tipe pengembalian ditandai sebagai "campuran".
Salinan kode adalah sebagai berikut:
fungsi() {
if (arguments.length) {
kembalikan "Anda lulus argumen"; // Rangkaian
} kalau tidak {
mengembalikan false; // boolean
}
}
Pseudocode (akan dibahas)
Terkadang Anda perlu menambahkan deskripsi proses fungsional untuk fungsi dan kelas ini dalam fungsi atau kelas. Jika Anda berencana untuk melakukan ini, Anda dapat menggunakan /*======= (= karakter akan muncul 5 kali atau lebih). Keuntungan dari ini adalah Anda tidak perlu menambahkan hal -hal ini ke kode (catatan penerjemah: penulis asli dapat berarti sistem manajemen kode).
Dengan cara ini, akan ada komentar yang sangat panjang di /*===== dan ====* /. Anda dapat mempertimbangkan apakah akan menghapusnya setelah fungsi disesuaikan.
Salinan kode adalah sebagai berikut:
/*=======
module.pseudo.kwargs = {
// URL: String
// Lokasi file
URL: "",
// mimetype: string
// Teks/html, teks/xml, dll
mimetype: ""
}
=====*/
fungsi (/*module.pseudo.kwargs*/ kwargs) {
dojo.debug (kwargs.url);
dojo.debug (kwargs.mimetype);
}
Tautan Asli: http://dojotoolkit.org/developer/styleguide
Diterjemahkan oleh: i.feelinglucky {at} gmail.com dari http://www.gracecode.com