Saya pernah mendengar bahwa meninggalkan kurung kurawal dalam pernyataan satu baris bisa berbahaya dalam JavaScript. Saya tidak ingat alasannya lagi dan pencarian Google tidak banyak membantu.
Apakah ada sesuatu yang membuatnya menjadi ide yang bagus untuk mengelilingi semua pernyataan dalam kurung kurawal di JavaScript?
Saya bertanya, karena semua orang tampaknya melakukannya.
javascript
Menara
sumber
sumber
Jawaban:
Tidak
Tetapi mereka direkomendasikan. Jika Anda pernah memperluas pernyataan, Anda akan membutuhkannya.
Ini sangat valid
Namun sangat disarankan agar Anda selalu menggunakan kawat gigi karena jika Anda (atau orang lain) pernah memperluas pernyataan itu akan diperlukan.
Praktik yang sama ini mengikuti semua bahasa gaya C sintaksis dengan menguatkan. C, C ++, Java, bahkan PHP semuanya mendukung satu pernyataan baris tanpa kawat gigi. Anda harus menyadari bahwa Anda hanya menyimpan dua karakter dan dengan gaya menguatkan beberapa orang Anda bahkan tidak menyimpan garis. Saya lebih suka gaya penjepit penuh (seperti berikut) sehingga cenderung sedikit lebih lama. Pengorbanannya dipenuhi dengan fakta bahwa Anda memiliki keterbacaan kode yang sangat jelas.
sumber
Ada aspek keterbacaan - bahwa ketika Anda memiliki pernyataan majemuk itu bisa sangat membingungkan. Indentasi membantu tetapi tidak berarti apa-apa bagi kompiler / juru bahasa.
Dan kemudian ada aspek ekstensibilitas:
Berpikir bahwa jika Anda selalu memiliki tanda kurung maka Anda tahu untuk memasukkan pernyataan lain di dalam blok itu.
sumber
if (a===true) alert(a);
. Sekarang sudah jelas!Pertanyaan itu menanyakan tentang pernyataan pada satu baris. Namun, banyak contoh yang diberikan menunjukkan alasan untuk tidak meninggalkan kawat gigi berdasarkan beberapa pernyataan garis. Benar-benar aman untuk tidak menggunakan tanda kurung pada satu baris, jika itu adalah gaya pengkodean yang Anda inginkan.
Misalnya, pertanyaannya adalah apakah ini ok:
Tidak bertanya apakah ini ok:
Saya pikir meninggalkan tanda kurung lebih disukai karena membuat kode lebih mudah dibaca dengan sintaks yang tidak berlebihan.
Gaya pengkodean saya adalah jangan pernah menggunakan tanda kurung kecuali kodenya blok. Dan untuk tidak pernah menggunakan banyak pernyataan pada satu baris (dipisahkan oleh titik koma). Saya menemukan ini mudah dibaca dan dihapus dan tidak pernah memiliki masalah pelingkupan pada pernyataan 'jika'. Akibatnya, menggunakan tanda kurung pada satu jika pernyataan kondisi akan membutuhkan 3 baris. Seperti ini:
Menggunakan satu baris jika pernyataan lebih disukai karena menggunakan lebih sedikit ruang vertikal dan kode lebih kompak.
Saya tidak akan memaksa orang lain untuk menggunakan metode ini, tetapi itu bekerja untuk saya dan saya tidak bisa lebih tidak setuju dengan contoh yang diberikan tentang bagaimana meninggalkan tanda kurung mengarah ke kesalahan pengkodean / pelingkupan.
sumber
/*eslint curly: ["error", "multi"]*/
Secara teknis tidak, tetapi sebaliknya benar-benar Ya !!!
Lupakan "Ini preferensi pribadi", "kodenya akan berjalan dengan baik", "telah berfungsi dengan baik untuk saya", "lebih mudah dibaca" yada yada BS. Ini dapat dengan mudah menyebabkan masalah yang sangat serius jika Anda membuat kesalahan dan percayalah, sangat mudah untuk membuat kesalahan saat Anda membuat kode (Don't belive ?, lihat Apple yang terkenal bug yang gagal ).
Argumen: "Ini pilihan pribadi"
Tidak, bukan. Kecuali jika Anda adalah tim satu orang yang berangkat dari mars, tidak. Sebagian besar waktu akan ada orang lain membaca / memodifikasi kode Anda. Dalam tim pengkodean yang serius ini akan menjadi cara yang disarankan, jadi ini bukan 'preferensi pribadi'.
Argumen: "kode akan berjalan dengan baik"
Begitu juga kode spageti! Apakah ini berarti tidak masalah untuk membuatnya?
Argumen: "sudah bekerja dengan baik untuk saya"
Dalam karir saya, saya telah melihat banyak bug yang dibuat karena masalah ini. Anda mungkin tidak ingat berapa kali Anda berkomentar
'DoSomething()'
dan bingung mengapa'SomethingElse()'
dipanggil:Atau menambahkan 'SomethingMore' dan tidak menyadari itu tidak akan dipanggil (meskipun lekukan menyiratkan sebaliknya):
Ini adalah contoh kehidupan nyata yang saya miliki. Seseorang ingin mengaktifkan semua pencatatan sehingga mereka menjalankan find & replace
"console.log"
=>//"console.log"
:Lihat masalahnya?
Bahkan jika Anda berpikir, "ini sangat sepele, saya tidak akan pernah melakukan itu"; ingat bahwa akan selalu ada anggota tim dengan keterampilan pemrograman yang lebih rendah daripada Anda (semoga Anda bukan yang terburuk di tim!)
Argumen: "lebih mudah dibaca"
Jika saya belajar sesuatu tentang pemrograman, hal-hal sederhana menjadi sangat kompleks dengan sangat cepat. Sangat umum bahwa ini:
berubah menjadi yang berikut setelah diuji dengan berbagai browser / lingkungan / use case atau fitur baru ditambahkan:
Dan bandingkan dengan ini:
PS: Poin bonus pergi ke siapa yang melihat bug dalam contoh di atas.
sumber
Tidak ada masalah rawatan!
Masalah dengan Anda semua adalah Anda meletakkan tanda titik koma di mana-mana. Anda tidak perlu kurung kurawal untuk banyak laporan. Jika Anda ingin menambahkan pernyataan, cukup gunakan koma.
Ini adalah kode yang valid yang akan berjalan seperti yang Anda harapkan!
sumber
if
,else
danalert
dan tidakIf
,Else
danAlert
?if
dan(
, sepertiif(true) doSomething();
Tidak ada alasan pemrograman untuk menggunakan kurung kurawal pada pernyataan satu baris.
Ini hanya tergantung pada preferensi dan keterbacaan coders.
Kode Anda tidak akan rusak karenanya.
sumber
Selain alasan yang disebutkan oleh @ Josh K (yang juga berlaku untuk Java, C dll), satu masalah khusus dalam JavaScript adalah penyisipan titik koma otomatis . Dari contoh Wikipedia:
Jadi, ini juga dapat menghasilkan hasil yang tidak terduga, jika digunakan seperti ini:
Tidak terlalu baik untuk menulis
tapi mungkin di sini kesalahannya sedikit lebih mudah dideteksi (?)
sumber
Ini masalah gaya, tetapi kurung kurawal baik untuk mencegah kemungkinan menggantung yang lain .
sumber
Ada banyak jawaban bagus, jadi saya tidak akan mengulangi, kecuali untuk mengatakan "aturan" saya ketika kawat gigi dapat dihilangkan: pada kondisi yang 'kembali' atau 'melempar' (misalnya) sebagai satu-satunya pernyataan mereka . Dalam hal ini kontrol aliran sudah jelas bahwa itu berhenti:
Bahkan "kasus buruk" dapat dengan cepat diidentifikasi (dan diperbaiki) karena kontrol aliran terminasi. Konsep / struktur "aturan" ini juga berlaku untuk sejumlah bahasa.
Tentu saja, ini juga mengapa orang dapat menggunakan linter ..
sumber
Inilah mengapa dianjurkan
Katakanlah saya menulis
Kemudian pengembang berikutnya datang dan berkata "Oh, saya perlu melakukan sesuatu yang lain", jadi mereka menulis
Sekarang seperti yang Anda lihat "AlsoTrue" akan selalu benar, karena pengembang pertama tidak menggunakan kawat gigi.
sumber
Saat ini saya sedang mengerjakan minifier. Bahkan sekarang saya memeriksanya di dua skrip besar. Secara eksperimental saya menemukan: Anda dapat menghapus kurung kurawal di belakang untuk, jika, selain itu, berfungsi * jika kurung kurawal tidak termasuk ';', 'kembali', 'untuk', 'jika', 'lain-lain', 'while', 'do', 'function'. Sambungan terlepas baris.
Tentu saja Anda perlu mengganti kurung kurawal dengan titik koma jika tidak diikuti oleh kurung kurawal lainnya.
Fungsi tidak boleh diakhiri dengan koma.
Diuji pada Chrome dan FF.
sumber
Selalu menemukan itu
lebih mudah di mata saya daripada
juga bersyarat seperti
lebih mudah dibaca (pendapat pribadi saya) daripada
tapi saya kira itu turun ke gaya pengkodean
sumber
Tidak menjawab pertanyaan secara langsung, tetapi di bawah ini adalah sintaks singkat tentang apakah kondisi pada satu baris
Ex:
Dapat ditulis seperti ini:
sumber
Ada banyak masalah dalam javascript. Lihatlah arsitek JavaScript Douglas Crockford berbicara tentang hal itu The jika pernyataan tampaknya baik-baik saja tapi kembali pernyataan dapat memperkenalkan masalah.
sumber
Saya menemukan jawaban ini mencari tentang pengalaman serupa sehingga saya memutuskan untuk menjawabnya dengan pengalaman saya.
Pernyataan tanpa bracket berfungsi di sebagian besar browser, namun, saya menguji bahwa metode tanpa bracket sebenarnya tidak berfungsi di beberapa browser.
Pada 26 Februari 2018, pernyataan ini berfungsi di Pale Moon, tetapi tidak Google Chrome.
sumber
Level indentasi awal dari sebuah pernyataan harus sama dengan jumlah kawat gigi terbuka di atasnya. (tidak termasuk kawat gigi yang dikutip atau dikomentari atau yang dalam arahan preprosesor)
Kalau tidak, K&R akan menjadi gaya lekukan yang bagus. Untuk memperbaiki gaya mereka, saya sarankan menempatkan pernyataan sederhana pendek jika pada satu baris.
dari pada
Jika saya sedang menulis editor, saya akan membuat tombol format otomatisnya menyedot bilah ke baris yang sama dengan foo, dan saya akan membuatnya memasukkan kawat gigi di sekitar bilah jika Anda menekan kembali sebelum seperti ini:
Maka mudah dan konsisten untuk menambahkan pernyataan baru di atas atau di bawah bilah di dalam tubuh pernyataan if
sumber
Terkadang mereka tampaknya dibutuhkan! Saya sendiri tidak bisa percaya, tapi kemarin terpikir oleh saya dalam sesi Firebug (Firefox 22.0 terbaru) itu
dieksekusi melakukan sesuatu walaupun my.condition.key itu benar . Menambahkan kawat gigi:
memperbaiki masalah itu. Ada banyak sekali contoh di mana ia tampaknya bekerja tanpa kawat gigi, tetapi dalam kasus ini jelas tidak.
Orang-orang yang cenderung lebih dari satu pernyataan pada satu baris harus sangat pasti selalu menggunakan kawat gigi, tentu saja, karena hal-hal seperti
sulit ditemukan.
sumber
Saya hanya ingin mencatat bahwa Anda juga bisa membiarkan kurung kurawal terlepas dari yang lain. Seperti yang terlihat dalam artikel ini oleh John Resig's .
sumber
else
untuk mencocokkan penggunaan brace - contoh ini akan membutuhkan kawat gigi padaelse
blok untuk lulus tinjauan kode. [1]: wiki.qt.io/Qt_Coding_Style#BracesAda cara untuk mencapai beberapa baris kawat gigi non curly jika pernyataan .. (Wow apa bahasa Inggris ..) tetapi agak membosankan:
sumber
if (true) funcName()
danelse return null