Kata pengantar:
Gaya pengkodean bahasa pemrograman sangat penting untuk perangkat lunak pemeliharaan jangka panjang, terutama dalam kerja tim. Jika sebuah tim menggunakan gaya pengkodean yang terpadu dan standar, itu dapat meningkatkan tingkat kolaborasi tim dan efisiensi kerja. Di jantung panduan gaya pemrograman adalah aturan pemformatan dasar yang menentukan cara menulis kode tingkat tinggi. Panduan ini berasal dari buku "Menulis JavaScript yang Dapat Dipelihara", berdasarkan "spesifikasi pengkodean bahasa Java" dan spesifikasi pemrograman JavaScript Crockford, serta beberapa pengalaman dan preferensi pribadi Nicbolas. Tujuan menulis artikel ini adalah untuk memperdalam kesan Anda, dan untuk membuat lebih banyak orang memahami gaya pengkodean JS dan meningkatkan kualitas pengkodean mereka. Untuk informasi lebih lanjut, silakan baca "Menulis JavaScript yang Dapat Dipelihara".
1. Indentasi
Tingkat setiap baris terdiri dari 4 ruang, menghindari lekukan menggunakan tab.
// metode penulisan yang bagus jika (true) {dosomething ();}2.Length of Row
Setiap baris tidak boleh melebihi 80 karakter. Jika garis melebihi 80 karakter, itu harus dipatahkan setelah operator. Baris berikutnya harus menambah dua level indentasi (8 karakter).
// metode penulisan yang baik dosomething (argumen1, argumen2, aegment3, argumen4, argumen5); // metode penulisan yang buruk: dosomething indentasi (argumen1, argumen2, aegment3, argumen4, argumen5);
3. Nilai Asli
String harus selalu menggunakan kutipan ganda dan menyimpan satu baris, menghindari menggunakan slash untuk memulai satu baris di string.
Angka harus menggunakan bilangan bulat desimal, dan algoritma ilmiah mewakili bilangan bulat, bilangan bulat heksadesimal, atau desimal titik mengambang desimal. Setidaknya satu angka harus dipertahankan sebelum dan sesudah desimal. Hindari menggunakan jumlah langsung oktal.
Nilai Khusus NULL harus dihindari kecuali dalam kasus -kasus berikut.
• Digunakan untuk menginisialisasi variabel, yang dapat diberikan nilai ke objek.
• Digunakan untuk membandingkan dengan variabel yang diinisialisasi, yang dapat atau bukan objek.
• Ketika parameter suatu fungsi diharapkan menjadi objek, ia dilewatkan sebagai parameter.
• Ketika nilai pengembalian fungsi diharapkan menjadi objek, itu pingsan sebagai nilai pengembalian.
Hindari menggunakan nilai khusus yang tidak ditentukan. Untuk menentukan apakah suatu variabel didefinisikan, tipe operator harus digunakan.
4. Jarak operator
Ruang harus digunakan sebelum dan sesudah anggaran biner untuk menjaga ekspresi tetap rapi. Operator termasuk operator penugasan dan operator logis.
// Tulisan yang bagus untuk (var i = 0; i <count; i ++) {process (i);} // tulisan yang buruk: ruang hilang untuk (var i = 0; i <count; i ++) {proses (i);}5. Jarak braket
Saat menggunakan kurung, seharusnya tidak ada ruang segera setelah braket kiri dan segera sebelum braket dekat.
// Tulisan yang bagus untuk (var i = 0; i <count; i ++) {proses (i);} // tulisan yang buruk: Ada ruang tambahan di kedua sisi parameter untuk (var i = 0; i <count; i ++) {proses (i);}6. Pengukuran Objek Langsung
Jumlah langsung objek harus memiliki format berikut.
• Kawat gigi kiri awal harus disimpan pada garis yang sama dengan ekspresi.
• Nilai nama dari setiap atribut harus dijaga agar tetap indentasi, dan atribut pertama harus menjadi baris baru setelah penjepit keriting kiri.
• Nilai nama setiap atribut harus digunakan tanpa kutipan, diikuti oleh usus besar (sebelum ruang), diikuti oleh nilai.
• Jika nilai atribut adalah jenis fungsi, badan fungsi harus memulai baris baru di bawah nama atribut, dan garis kosong harus disimpan sebelum dan sesudahnya.
• Baris kosong dapat dimasukkan sebelum dan sesudah satu set properti terkait untuk meningkatkan keterbacaan kode.
• Penjepit kanan akhir harus menempati satu baris secara eksklusif.
// metode penulisan yang baik var objek = {key1: value1, key2: value2, func: function () {// dosomething}, key3: value3}; // Metode penulisan yang buruk: indentation tidak pantas var objek = {key1: value1, key2: value2}; // metode penulisan buruk: kurangnya baris kosong di sekitar lini di seluruh tubuh: (value1, key2: value2}; // Metode penulisan buruk: kurangnya baris kosong di sekitar lini blanko. {// dosomething}, key3: value3};Ketika objek literal digunakan sebagai parameter fungsi, jika nilainya adalah variabel, kawat gigi awal harus berada pada baris yang sama dengan nama fungsi. Semua aturan lain yang terdaftar sebelumnya juga berlaku.
// metode penulisan yang baik dosomething ({key1: value1, key2: value2}); // metode penulisan yang buruk: semua kode dosomething ({key1: value1, key2: value2});7. Komentar
Menggunakan komentar yang ringkas dan jelas dapat membantu orang lain memahami kode Anda. Komentar harus digunakan dalam situasi berikut.
• Kode tidak jelas.
• Kode yang mungkin keliru karena kesalahan.
• Kode khusus browser yang diperlukan tetapi tidak jelas.
• Untuk objek, metode, atau properti, perlu untuk menghasilkan dokumen (menggunakan komentar dokumen yang sesuai).
Komentar Single Line
Komentar satu baris harus digunakan untuk menggambarkan satu baris kode atau satu set kode terkait. Mungkin ada tiga cara untuk menggunakan komentar satu baris.
• Komentar eksklusif untuk menjelaskan baris kode berikutnya.
• Komentar di akhir baris kode untuk menjelaskan kode sebelumnya.
• Beberapa baris untuk mengomentari blok kode.
// Tulisan yang baik jika (kondisi) {// Jika kode dieksekusi di sini, itu berarti bahwa semua pemeriksaan keamanan telah dilewati;} // Penulisan yang buruk: Tidak ada baris kosong sebelum komentar jika (kondisi) {// Jika kode dieksekusi di sini, itu berarti semua pemeriksaan keamanan;} // Penulisan yang buruk: indentasi yang tidak benar jika kondisi (kondisi). Penulisan: Komentar multi-line harus digunakan // Kode ini digunakan untuk ** penilaian // maka jika (kondisi) {// jika kode dieksekusi di sini, itu berarti bahwa semua cek keamanan telah dilewati;} // tulisan yang baik: ketika berkomentar di akhir baris, ruang harus disimpan di antara akhir kode dan komentar jika kondisi (kondisi) {// jika itu ada kode yang dijalankan di antara akhir kode dan komentarnya (kondisi) {// jika itu ada kode yang ada di antara akhir kode dan komentar jika kondisi (kondisi) {// jika itu jika ada kode, jika kondisi itu berarti bahwa semua kode (kondisi) {// jika ada kode, jika ada kode, jika kondisi itu berarti semua kode dan kondisi (kondisi) {// jika ada kode, jika kondisi itu berarti semua kode dan komentarnya (kondisi) {// jika ada kode, jika kondisi (kondisi) {// jika ada kode, jika kondisi itu berarti bahwa semua kode (kondisi) {// jika ada kode; // Jalankan fungsi **} // yang buruk: tidak ada cukup spasi antara kode dan komentar jika (kondisi) {// jika kode dieksekusi di sini, itu berarti bahwa semua cek keamanan telah diizinkan (); // Jalankan fungsi **} // yang bagus: Saat mengomentari blok kode, Anda harus menghubungi untuk menggunakan komentar satu baris, dan komentar multi-line tidak boleh digunakan dalam kasus ini. // if (condition) {// diizinkan (); // Jalankan ** Function //}Komentar multi-line
Komentar multi-line harus digunakan ketika kode membutuhkan lebih banyak teks untuk ditafsirkan. Setiap komentar multi-line memiliki setidaknya tiga baris sebagai berikut:
1. Baris pertama hanya mencakup /* komentar mulai. Seharusnya tidak ada teks lain di baris ini.
2. Garis-garis berikut dimulai dengan * dan tetap selaras kiri. Ini dapat dijelaskan dengan kata -kata.
3. Baris terakhir dimulai dengan */ dan tetap selaras dengan baris sebelumnya. Seharusnya tidak ada teks lain.
Baris pertama dari komentar multi-line harus mempertahankan tingkat lekukan yang sama seperti menggambarkan kode tersebut. Setiap garis selanjutnya harus memiliki tingkat lekukan yang sama dan ruang yang terpasang (untuk menjaga karakter * dengan benar diselaraskan). Jalur kosong harus dipesan sebelum setiap kode multi-line.
// metode penulisan yang baik, if (condition) {/** Jika kode dieksekusi di sini* itu berarti bahwa semua deteksi keamanan telah dilewati*/ diizinkan ();}Pernyataan komentar
Komentar kadang -kadang dapat digunakan untuk mendeklarasikan informasi tambahan ke sepotong kode. Format pernyataan ini dimulai dengan satu kata dan segera diikuti oleh usus besar. Pernyataan yang dapat digunakan adalah sebagai berikut.
TODO: Kode deskripsi belum selesai. Itu harus mencakup apa yang ingin Anda lakukan selanjutnya.
Hack: Ini menunjukkan bahwa implementasi kode telah mengambil jalan pintas. Harus menyertakan alasan mengapa peretasan digunakan. Ini juga dapat menunjukkan bahwa mungkin ada solusi yang lebih baik untuk masalah tersebut.
XXX: Jelaskan bahwa kode tersebut bermasalah dan harus diperbaiki sesegera mungkin.
FixMe: Jelaskan bahwa kode tersebut bermasalah dan harus diperbaiki sesegera mungkin. Sedikit detik ke xxx.
Ulasan: Kode instruksi perlu ditinjau dalam segala perubahan yang mungkin.
Deklarasi ini dapat digunakan dalam satu atau lebih komentar dan harus mengikuti aturan pemformatan yang sama seperti jenis komentar umum.
8. Penamaan
Variabel dan fungsi harus berhati -hati saat menamainya. Penamaan harus dibatasi pada karakter alfabet numerik, dan garis bawah (_) dapat digunakan dalam beberapa kasus. Yang terbaik adalah tidak menggunakan tanda dolar ($) atau backslash (/) dalam penamaan apa pun.
Penamaan variabel harus dalam format penamaan unta, dengan huruf kecil huruf pertama dan huruf pertama dari setiap kata huruf besar. Kata pertama dari nama variabel harus menjadi kata benda (bukan kata kerja) untuk menghindari kebingungan dengan fungsi yang sama. Jangan gunakan garis bawah dalam nama variabel.
// metode penulisan yang baik var accountnumber = "test001"; // Metode penulisan yang buruk: Mulailah dengan huruf modal var accountnumber = "test001"; // Metode penulisan yang buruk: Mulai dengan kata kerja var getAccountNumber = "test001"; // Metode penulisan yang buruk: Gunakan underscore var account_number = "test001";
Nama fungsi juga harus dalam format penamaan unta. Kata pertama dari nama fungsi harus berupa kata kerja (bukan kata benda) untuk menghindari kebingungan dengan variabel yang sama. Yang terbaik adalah tidak menggunakan underscore dalam nama fungsi.
// metode penulisan yang bagus fungsi dosomething () {// kode} // metode penulisan yang buruk: fungsi dosomething () {// kode} // metode penulisan yang buruk: function sesuatu () {// kode} // metode penulisan yang buruk: gunakan fungsi underscore do_something () {// kode}Konstruktor - fungsi yang membuat objek baru melalui operator baru - juga harus disebutkan dalam format unta dan karakter pertama dikapitalisasi. Nama konstruktor harus dimulai dengan non-kata kerja, karena yang baru mewakili operasi membuat instance suatu objek.
// metode penulisan yang bagus fungsi myobject () {// kode} // metode penulisan yang buruk: function myobject () Pada awal huruf kecil {// kode} // metode penulisan yang buruk: gunakan fungsi underscore my_object () {// kode} // metode penulisan yang buruk: fungsi pada awal verb getMyObject () {// code} {//Nama konstanta (variabel yang nilainya tidak diubah) harus semua huruf kapital, dipisahkan oleh satu garis bawah di antara kata -kata yang berbeda.
// metode penulisan yang baik var total_count = 10; // metode penulisan yang buruk: bentuk unta var totalcount = 10; // metode penulisan yang buruk: bentuk campuran var total_count = 10;
Atribut objek sama dengan variabel. Metode objek sama dengan fungsi fungsi. Jika properti atau metode bersifat pribadi, garis bawah harus ditambahkan sebelumnya.
// metode penulisan yang baik var objek = {_count: 10,4 _getCount: function () {return this._count; }}9. Deklarasi Variabel dan Fungsi
Deklarasi Variabel
Semua variabel harus didefinisikan sebelumnya sebelum digunakan. Definisi variabel harus ditempatkan pada awal fungsi, menggunakan ekspresi var satu variabel per baris. Kecuali untuk baris pertama, semua baris harus diberi indentasi satu lapisan lagi sehingga nama variabel dapat diselaraskan secara vertikal. Definisi variabel harus diinisialisasi dan operator penugasan harus mempertahankan lekukan yang konsisten. Variabel yang diinisialisasi harus sebelum variabel diinisialisasi.
// Metode penulisan yang baik var count = 10, name = "jeri", found = false, kosong;
Deklarasi Fungsi
Fungsi harus didefinisikan sebelumnya sebelum digunakan. Fungsi yang bukan metode (yaitu, tidak ada atribut sebagai objek) yang harus menggunakan format yang ditentukan oleh fungsi (bukan format fungsi ekspresi dan fungsi konstruktor fungsi). Seharusnya tidak ada ruang antara nama fungsi dan tanda kurung mulai. Ruang harus dibiarkan antara kurung akhir dan kurung keriting di sebelah kanan. Kawat gigi keriting di sebelah kanan harus tetap pada baris yang sama dengan kata kunci fungsi. Seharusnya tidak ada ruang antara tanda kurung awal dan akhir. Ruang harus dibiarkan setelah koma antara nama parameter. Tubuh fungsi harus tetap indentasi di tingkat pertama.
// Metode penulisan yang bagus fungsi luar () {var count = 10, name = "jeri", found = false, empling; function inner () {// code} // kode yang memanggil dalam ()}Fungsi anonim dapat ditetapkan sebagai metode untuk objek, atau sebagai parameter untuk fungsi lain. Seharusnya tidak ada ruang antara kata kunci fungsi dan braket start.
// metode penulisan yang baik objek.method = function () {// code}; // Metode penulisan yang buruk: Object space salah.method = function () {// kode};Fungsi yang dipanggil segera harus dibungkus dengan tanda kurung di lapisan luar panggilan fungsi.
// metode bagus var value = (function () {// function body return {pesan: "hai"}} ());Mode ketat
Mode ketat harus digunakan hanya dalam fungsi dan tidak boleh digunakan secara global.
// Metode Penulisan Buruk: Gunakan mode ketat "Gunakan ketat"; function dosomething () {// code} // Metode penulisan yang baik fungsi dosomething () {"Gunakan ketat"; // kode}10. Operator
Penugasan
Saat menetapkan nilai ke variabel, jika sisi kanan adalah ekspresi yang berisi pernyataan perbandingan, itu perlu dibungkus dalam tanda kurung.
// tulisan bagus var flag = (i <count); // penulisan buruk: tanda kurung var yang hilang = i <count;
Operator tanda yang sama
Gunakan === (sangat sama) dan! == (benar -benar tidak setara) bukan == (sama) dan! = (Tidak setara) untuk menghindari kesalahan konversi tipe yang lemah.
// tulisan bagus var sama = (a === b); // tulisan bagus var sama = (a == b);
Operator tiga kali lipat
Operator Ternary harus digunakan hanya dalam pernyataan penugasan bersyarat dan tidak boleh digunakan sebagai pengganti pernyataan jika.
// metode penulisan yang baik var value = kondisi? value1: value2; // Metode penulisan yang buruk: Tidak ada penugasan, jika ekspresi harus digunakan? dosomething (): dosomethingelse;
11. Pernyataan
Pernyataan sederhana
Setiap baris hanya berisi satu pernyataan paling banyak. Semua pernyataan sederhana harus diakhiri dengan titik koma (;).
// Metode Penulisan yang Baik Hitungan ++; A = B; // Metode Penulisan Buruk: Berbagai ekspresi ditulis dalam satu baris jumlah ++; a = b;
Pernyataan pengembalian
Pernyataan pengembalian tidak boleh dibungkus dalam tanda kurung saat mengembalikan nilai, kecuali dalam beberapa kasus ini dapat membuat nilai pengembalian lebih mudah dipahami. Misalnya:
return; return collection.size (); return (size> 0? size: defaultsize);
Pernyataan majemuk
Pernyataan majemuk adalah daftar pernyataan yang terlampir dalam kawat gigi.
• Pernyataan terlampir harus diindentasi satu tingkat lebih dari pernyataan majemuk.
• Kawat gigi awal harus berada di ujung garis di mana pernyataan senyawa berada; Kawat gigi akhir harus menempati satu baris dan tetap indentasi sama dengan awal pernyataan gabungan.
• Ketika pernyataan adalah bagian dari struktur kontrol, seperti jika atau untuk pernyataan, semua pernyataan perlu tertutup dalam kawat gigi, termasuk satu pernyataan. Konvensi ini memudahkan kami untuk menambahkan pernyataan tanpa khawatir lupa menambahkan kurung dan menyebabkan bug.
• Kata kunci untuk pernyataan seperti jika harus dimulai, diikuti oleh ruang, dan kawat gigi awal harus diikuti oleh ruang.
Jika pernyataan
Pernyataan IF harus dalam format berikut.
if (kondisi) {pernyataan} if (kondisi) {pernyataan} else {pernyataan} if (kondisi) {pernyataan} else if (kondisi) {pernyataan} else {pernyataan}Tidak pernah diizinkan untuk menghilangkan kawat gigi keriting dalam pernyataan IF.
// Tulisan yang bagus jika (kondisi) {dosomething ();} // tulisan yang buruk: ruang yang tidak pantas jika (kondisi) {dosomething ();} // tulisan yang buruk: Semua kode ada pada satu baris jika (kondisi) {dosomething (); } // Tulisan yang buruk: Semua kode ada di satu baris dan tidak ada kawat gigi keriting jika (kondisi) dosomething ();untuk pernyataan
Untuk pernyataan tipe harus dalam format berikut.
untuk (inisialisasi; kondisi; perbarui) {pernyataan} untuk (variabel dalam objek) {pernyataan}Bagian inisialisasi dari pernyataan untuk tidak memiliki deklarasi variabel.
// Metode yang bagus var i, len; untuk (i = 0, len = 0; i <len; i ++) {// kode} // penulisan buruk: Deklarasikan variabel untuk (var i = 0, len = 0; i <len; i ++) {// kode} // Penulisan yang buruk: Deklarasikan variabel untuk (var var objek) {//Saat menggunakan pernyataan FOR-IN, ingatlah untuk menggunakan HasownProperty () untuk memeriksa ganda untuk memfilter anggota objek.
sementara pernyataan
Pernyataan kelas sementara harus dalam format berikut.
while (kondisi) {pernyataan}Lakukan pernyataan
Pernyataan kelas DO harus dalam format berikut.
do {pernyataan} while (kondisi);Pernyataan beralih
Pernyataan kelas sakelar harus dalam format berikut.
switch (ekspresi) {case ekspresi: pernyataan default: pernyataan}Kasing pertama di bawah sakelar harus dijaga agar tetap tertutup. Setiap kasing kecuali yang pertama, termasuk default, harus menyimpan garis kosong sebelumnya.
Setiap set pernyataan (kecuali default) harus diakhiri dengan istirahat, kembali, melempar, atau dilewati dengan baris komentar.
// Sakelar metode penulisan yang baik (value) {case 1:/ * jatuh */ case 2: dosomething (); merusak; Kasus 3: Kembalikan true; default: lempar kesalahan baru ("beberapa kesalahan");}Jika pernyataan sakelar tidak berisi kasus default, baris komentar harus diganti.
// Sakelar metode penulisan yang baik (value) {case 1:/ * jatuh */ case 2: dosomething (); merusak; Kasus 3: Kembalikan true; default: // tidak ada default}Coba pernyataan
Pernyataan kelas coba harus diformat sebagai berikut.
coba {pernyataan} catch (variabel) {pernyataan} coba {pernyataan} catch (variabel) {pernyataan} akhirnya {pernyataan}12. Tinggalkan putih
Menambahkan baris kode kosong antara kode terkait logika dapat meningkatkan keterbacaan kode.
Dua garis kosong terbatas untuk digunakan dalam situasi berikut:
• Antara file kode sumber yang berbeda.
• Antara definisi kelas dan antarmuka.
Garis kosong baris tunggal hanya tersedia dalam kasus berikut.
• Antara metode.
• Antara variabel lokal dalam metode dan pernyataan baris pertama.
• Sebelum banyak atau komentar satu baris.
• Blok kode logis dalam metode ini digunakan untuk meningkatkan keterbacaan kode.
Ruang harus digunakan dalam situasi berikut.
• Kasus di mana kata kunci diikuti oleh tanda kurung harus dipisahkan oleh spasi.
• Ruang harus dibiarkan setelah koma dalam daftar parameter.
• Operan dari semua operator biner kecuali poin (.) Harus dipisahkan oleh ruang. Operan operator monolog tidak boleh dipisahkan oleh kosong, seperti tanda minus unary, peningkatan (++), penurunan (-).
• Ekspresi pernyataan untuk harus dipisahkan oleh ruang.
13. Apa yang perlu dihindari
• Jangan membuat objek baru menggunakan tipe pembungkus asli seperti string.
• Hindari menggunakan eval ().
• Hindari menggunakan dengan pernyataan. Pernyataan ini tidak ada lagi dalam mode ketat dan juga dapat dihapus dalam standar ECMASCRIPT di masa depan.
Ditulis di akhir
Panduan di atas tidak sepenuhnya diikuti selama proses pengembangan. Kami hanya dapat menggambar beberapa dari mereka untuk meningkatkan gaya pengkodean kami dan membuat kode kami dapat dibaca dan dapat dipelihara. Mengenai gaya pengkodean, setiap tim memiliki karakteristiknya sendiri. Selama tim konsisten, tidak masalah untuk berkembang secara efisien. Beberapa aturan bukanlah sesuatu yang harus kita patuhi secara konstan. Misalnya, dalam hal lekukan, kami sering menggunakan kunci tab lebih nyaman, tetapi kami tidak dapat menjamin bahwa tab mewakili 4 ruang di lingkungan apa pun. Untuk mempertahankan konsistensi dalam lekukan, jika kunci tab digunakan, itu harus digunakan selama proses; Dan kami juga tidak harus menggunakan "" dan "", dan juga dimungkinkan untuk digunakan ", selama Anda mempertahankan gaya yang konsisten. Ada banyak masalah gaya serupa lainnya, semuanya berdasarkan pilihan pribadi.
Tidak ada aturan absolut, hanya cocok atau tidak.