Haruskah kurung kurawal berada di jalurnya sendiri atau tidak? Apa yang Anda pikirkan?
if (you.hasAnswer()) {
you.postAnswer();
} else {
you.doSomething();
}
atau seharusnya begitu
if (you.hasAnswer())
{
you.postAnswer();
}
else
{
you.doSomething();
}
atau bahkan
if (you.hasAnswer())
you.postAnswer();
else
you.doSomething();
Harap bersikap konstruktif! Jelaskan mengapa, berbagi pengalaman, dukung dengan fakta dan referensi.
coding-style
code-formatting
Tom Wijsman
sumber
sumber
Jawaban:
Ketika saya masih mahasiswa saya biasa memasang kurung kurawal pada baris yang sama, sehingga ada lebih sedikit garis, dan kode dicetak pada lebih sedikit halaman. Melihat satu karakter braket yang dicetak sebagai satu-satunya hal dalam satu baris mengganggu. (lingkungan, pemborosan kertas)
Tetapi ketika mengkode aplikasi besar, memungkinkan beberapa baris dengan hanya kawat gigi di dalamnya terjangkau, mengingat perasaan 'pengelompokan' yang diberikannya.
Gaya apa pun yang Anda pilih, konsistenlah sehingga tidak menjadi overhead bagi otak Anda sendiri untuk memproses banyak gaya dalam potongan kode terkait . Dalam skenario yang berbeda (seperti di atas) saya akan mengatakan tidak apa-apa untuk menggunakan gaya yang berbeda, lebih mudah untuk 'mengalihkan konteks' di tingkat tinggi.
sumber
Anda seharusnya tidak pernah melakukan metode ke-3.
Skimping pada kawat gigi mungkin menyelamatkan Anda beberapa kali penekanan tombol, tetapi pembuat kode berikutnya yang datang, menambahkan sesuatu ke klausa Anda yang lain tanpa memperhatikan blok yang hilang kawat gigi akan ada untuk banyak rasa sakit.
Tulis kode Anda untuk orang lain.
sumber
Untuk waktu yang lama saya berpendapat bahwa mereka bernilai sama, atau sangat dekat dengan sama sehingga kemungkinan mendapatkan dengan membuat pilihan yang tepat jauh, jauh, di bawah biaya berdebat tentang hal itu.
Menjadi konsisten itu penting . Jadi saya katakan, mari kita melempar koin dan mulai menulis kode.
Saya telah melihat programmer menolak perubahan seperti ini sebelumnya. Lupakan saja! Saya telah berganti karier berkali-kali. Saya bahkan menggunakan gaya yang berbeda di C # saya daripada di PowerShell saya.
Beberapa tahun yang lalu saya mengerjakan sebuah tim (~ 20 pengembang) yang memutuskan untuk meminta input, dan kemudian membuat keputusan, dan kemudian menegakkannya di semua basis kode. Kami punya 1 minggu untuk memutuskan.
Banyak erangan & memutar mata. Banyak "Saya suka cara saya, karena itu lebih baik" tetapi tidak ada substansi.
Ketika kami mempelajari poin-poin penting dari pertanyaan, seseorang bertanya bagaimana menangani masalah ini dengan gaya brace-on-the-same-line:
Perhatikan bahwa tidak segera jelas di mana daftar parameter berakhir, dan tubuh dimulai. Dibandingkan dengan:
Kami melakukan beberapa bacaan tentang bagaimana orang-orang di seluruh dunia telah mengatasi masalah ini, dan menemukan pola menambahkan garis kosong setelah penjepit terbuka:
Jika Anda akan membuat jeda visual, Anda sebaiknya melakukannya dengan penjepit. Kemudian jeda visual Anda menjadi konsisten juga.
Sunting : Dua alternatif untuk solusi 'garis kosong ekstra' saat menggunakan K&R:
1 / Indent argumen fungsi berbeda dari fungsi tubuh
2 / Letakkan argumen pertama pada baris yang sama dengan nama fungsi dan sejajarkan argumen lebih lanjut pada baris baru dengan argumen pertama
Contoh:
1 /
2 /
/Sunting
Saya masih berpendapat bahwa konsistensi lebih penting daripada pertimbangan lain, tetapi jika kita tidak memiliki preseden yang mapan , maka brace-on-next-line adalah cara untuk pergi.
sumber
Aturan utamanya adalah:
Bahkan jika Anda tidak memiliki kendala eksternal pada Anda, yang terbaik adalah (IMO) untuk mencari pedoman pengkodean atau gaya gaya (banyak digunakan) yang ada, dan coba dan ikuti itu. Jika Anda menggulung gaya Anda sendiri, ada kemungkinan besar Anda akan menyesalinya dalam beberapa tahun.
Akhirnya, gaya yang diimplementasikan / diimplementasikan menggunakan style checker dan pemformat kode yang ada lebih baik daripada yang perlu "ditegakkan" secara manual.
sumber
Manfaat dari metode pertama adalah lebih kompak secara vertikal, sehingga Anda dapat memasukkan lebih banyak kode di layar Anda, dan itulah sebabnya saya lebih suka. Satu-satunya argumen yang saya dengar mendukung metode kedua adalah membuatnya lebih mudah untuk memasangkan kurung buka dan tutup, tetapi sebagian besar IDE memiliki pintasan keyboard untuk itu, dan itu sebenarnya pernyataan salah - alih-alih memasangkan braket pembuka ke penutup braket Anda dapat memasangkan braket penutup dengan ekspresi "awal blok" (jika, selain itu, untuk, sementara) pada tingkat indentasi yang sama, sehingga mudah untuk menentukan di mana awal blok.
Saya tidak melihat alasan untuk menyia-nyiakan seluruh baris hanya untuk braket ketika sebelumnya untuk / sementara / jika konstruksi sudah secara visual menunjukkan awal blok.
Yang mengatakan, saya percaya bahwa braket penutup harus berada di jalurnya sendiri karena kita perlu sesuatu untuk menunjukkan ujung blok dan struktur lekukannya dengan cara yang terlihat.
sumber
aku lebih memilih
lebih
karena garis
you.postAnswer();
itu jauh lebih mudah dibaca dan ditemukan pada pandangan pertama. Dengan cara kedua, itu akan tercampur dengan garis di atasnya (you.hasAnswer()
) membuat mata saya harus lebih fokus untuk membacanya.sumber
Saya lebih suka metode pertama. Kawat gigi sama sekali tidak layak terpisah.
Masalahnya, kawat gigi itu tidak penting. Itu hanya sampah sintaksis , yang sama sekali tidak perlu untuk memahami apa tujuan kode, tujuan itu dan cara penerapannya. Mereka hanya merupakan penghormatan kepada bahasa seperti C gaya lama di mana pengelompokan visual dari operator tidak mungkin karena ruang layar yang rendah tersedia.
Ada bahasa (Python, Haskell, Ruby) yang OK tanpa kawat sama sekali. Ini hanya mengonfirmasi bahwa kawat gigi adalah sampah, dan seharusnya tidak layak menerima saluran untuk mereka bila memungkinkan:
sumber
Gunakan Python dan hindari argumen sepenuhnya.
sumber
SyntaxError: not a chance
Posisi kurung kurawal seharusnya
meta data
dapat dikonfigurasi dalam IDE oleh programmer. Dengan begitu, kawat gigi sial di semua kode, terlepas dari penulis, terlihat sama.
sumber
Tergantung.
Jika saya mengkode dalam Javascript atau jQuery, saya menggunakan formulir pertama:
Tetapi jika saya mengkode dalam C #, saya menggunakan bentuk kedua, karena itu adalah cara kanonik untuk melakukannya dalam C #.
Perhatikan bahwa contoh Anda dapat ditulis
dalam C #.
sumber
Saya lebih suka yang pertama karena lebih sulit bagi saya untuk melihat kesalahan dalam contoh ini.
daripada dalam contoh ini
The
; {
hanya tampak lebih salah bagi saya daripada garis berakhir dengan;
jadi aku lebih mungkin untuk menyadarinya.sumber
Saya lebih suka varian sedikit 1)
Mengapa?
Saya pikir selalu menempatkan kawat gigi pada jalurnya sendiri mengurangi keterbacaan. Saya hanya bisa memasukkan sejumlah kode sumber pada layar saya. Gaya braket 2) membuat algoritma heave dengan banyak loop bersarang dan persyaratan lama sekali.
Namun, saya ingin
else
memulai pada jalur baru karenaif
danelse
milik bersama, secara visual. Jika ada braket di depanelse
, itu jauh lebih sulit untuk menemukan milik apa.3) mendiskualifikasi dirinya sendiri. Kita semua tahu hal buruk apa yang bisa terjadi jika Anda meninggalkan tanda kurung dan melupakannya.
sumber
else
garis ketika dibutuhkan, dan / atau menempatkan garis kosong antara if-block dan the-block lain untuk membuat segala sesuatu terlihat kurang dijejalkan. Gaya braket # 2 tidak melakukan apa pun selain menjauhkan tindakan dari kondisi. Dengan itu, favorit saya jelas bukan gaya braket python :)Saya memang membaca di suatu tempat bahwa penulis beberapa buku ingin kode mereka diformat seperti ini:
Tetapi kendala ruang dari penerbit mereka berarti mereka harus menggunakan ini:
Sekarang saya tidak tahu apakah itu benar (karena saya tidak dapat menemukannya lagi), tetapi gaya yang terakhir sangat lazim dalam buku.
Pada tingkat pribadi saya lebih suka tanda kurung pada baris terpisah sebagai:
a) mereka menunjukkan ruang lingkup baru
b) lebih mudah dikenali ketika Anda memiliki ketidakcocokan (meskipun ini bukan masalah dalam IDE yang menyoroti kesalahan untuk Anda).
sumber
Ah, Gaya Pelindung Sejati .
Ini memiliki segalanya untuk Jalan Suci - bahkan seorang nabi (Richard "jalan saya atau jalan raya" Stallman).
Orang itu sangat salah tentang banyak hal, tetapi GNU sangat tepat dalam hal kawat gigi.
[Update] Saya telah melihat cahaya, dan sekarang menyembah Allman
sumber
Contoh kedua, saya sangat besar dalam keterbacaan. Saya tidak tahan melihat apakah ada cara lain yang menghalangi = (
sumber
Jawaban sederhana: apa yang lebih mudah di-debug?
Dalam kasus apa Anda mendiagnosis masalah terlebih dahulu?
Saya tidak terlalu peduli dengan preferensi pribadi (ada banyak gaya lain, termasuk whitesmith dan al.) Dan saya tidak terlalu peduli ... selama itu tidak menghambat kemampuan saya membaca kode dan men - debug- nya.
Mengenai argumen "ruang pemborosan", saya tidak membelinya: Saya cenderung menambahkan garis kosong di antara grup logis untuk membuat program lebih jelas ...
sumber
Bukan berarti siapa pun akan menyadarinya, tetapi inilah mengapa kawat gigi memiliki garis yang sama dengan kondisional (kecuali kondisional yang sangat panjang, tetapi itu merupakan kasus tepi):
Di C, ini adalah konstruk yang valid:
Cepat! Apa yang dilakukan kode ini? Jika Anda menjawab "loop tak terbatas meminta input", Anda salah! Bahkan tidak sampai ke input. Itu tertangkap
while(true)
. Perhatikan titik koma di bagian akhir. Pola ini sebenarnya lebih umum dari yang seharusnya; C mengharuskan Anda untuk mendeklarasikan variabel Anda di awal blok, itulah sebabnya variabel baru dimulai.Garis kode adalah pemikiran. Kawat gigi adalah bagian dari pikiran yang mengandung kondisional atau loop. Karena itu, mereka termasuk dalam jalur yang sama.
;
ujung blok. Ini juga mengapa saya membenci sistem akhir blok ini yang IMHO sudah ketinggalan zaman dan bahasa Go membuktikannya. Saya telah melihat masalah ini berkali-kali walaupun tidak dalam skenario ini. Ini biasanya terjadi di mana mereka berniat untuk menambahkan sesuatu ke pernyataan dan lupa.postAnswer()
dandoSomething()
harus mengembalikan nilai untuk operator ternary, yang sering tidak terjadi: mereka dapat mengembalikan dengan baik kekosongan (tidak ada nilai). dan juga (setidaknya dalam c #) hasil?:
harus ditugaskan ke beberapa variabelSaya suka metode pertama. Tampaknya IMO lebih rapi, dan lebih kompak, yang saya suka.
EDIT: Ah, yang ketiga. Saya suka yang terbaik jika memungkinkan, karena bahkan lebih kecil / lebih rapi.
sumber
Anda bisa menulisnya:
Untuk menjawab pertanyaan; Saya dulu lebih suka kurung kurawal pada baris mereka sendiri, tetapi, untuk menghindari harus memikirkan bug dari penyisipan titik koma otomatis di browser saya mulai menggunakan gaya Mesir untuk javascript. Dan ketika mengkode java dalam gerhana saya tidak tertarik untuk bertarung (atau mengonfigurasi) gaya brace default, jadi saya menggunakan bahasa Mesir dalam hal itu juga. Sekarang saya baik-baik saja dengan keduanya.
sumber
postAnswer()
dandoSomething()
harus mengembalikan nilai untuk operator ternary, yang sering tidak terjadi: mereka dapat mengembalikan dengan baik kekosongan (tidak ada nilai). dan juga (setidaknya dalam c #) hasil?:
harus ditugaskan ke beberapa variabelHampir semua tanggapan di sini mengatakan beberapa variasi pada "Apa pun yang Anda lakukan, tetap dengan satu atau dua".
Jadi saya memikirkannya sejenak, dan harus mengakui bahwa saya tidak menganggapnya penting. Adakah yang bisa dengan jujur memberi tahu saya bahwa yang berikut ini sulit diikuti?
Saya tidak yakin tentang orang lain ... tapi saya sama sekali tidak memiliki masalah mental bolak-balik antara gaya. Memang butuh beberapa saat bagi saya untuk mengetahui apa yang kode lakukan, tapi itulah hasil dari saya hanya mengetik sintaks seperti C secara acak. :)
Menurut pendapat saya yang tidak terlalu rendah hati, membuka kawat gigi hampir sepenuhnya tidak relevan dengan keterbacaan kode. Ada beberapa kasus sudut yang tercantum di atas di mana satu gaya atau yang lain membuat perbedaan, tetapi untuk sebagian besar, penggunaan garis kosong secara bijaksana membersihkannya.
FWIW, gaya pengkodean kami di tempat kerja menggunakan bentuk yang sedikit lebih terstruktur 1 dan bentuk yang diubah 3. (C ++)
Saya ingin tahu apakah mereka yang lebih suka bentuk 2 akan menemukan versi bentuk 1 ini lebih baik, hanya karena garis kosong memberikan pemisahan visual yang lebih kuat.
sumber
Saya terkejut ini belum dinaikkan. Saya lebih suka pendekatan kedua karena memungkinkan Anda untuk memilih blok lebih mudah.
Ketika kawat gigi mulai dan berakhir pada kolom yang sama dan pada baris mereka sendiri, Anda dapat memilih dari margin atau dengan kursor pada kolom 0. Ini umumnya berjumlah daerah yang lebih murah hati dengan pilihan mouse atau lebih sedikit penekanan tombol dengan pemilihan keyboard.
Saya awalnya bekerja dengan kawat gigi pada baris yang sama dengan kondisional, tetapi ketika saya beralih saya menemukan itu mempercepat tingkat di mana saya bekerja. Ini bukan siang dan malam tentu saja, tetapi sesuatu yang akan memperlambat Anda sedikit bekerja dengan kawat gigi di samping kondisional Anda.
sumber
Saya pribadi suka cara kedua.
Namun, cara saya akan menunjukkan menurut saya yang terbaik karena menghasilkan keamanan kerja terbesar! Seorang mahasiswa dari universitas saya meminta saya untuk membantu mengerjakan pekerjaan rumahnya dan beginilah tampilannya. Seluruh program tampak seperti satu blok tunggal. Yang menarik adalah bahwa 95% bug dalam program yang dibuatnya berasal dari kawat gigi yang tidak cocok. 5% lainnya jelas setelah kawat gigi dicocokkan.
sumber
Preferensi pribadi saya adalah untuk metode pertama, mungkin karena itulah cara saya pertama kali belajar PHP.
Untuk
if
pernyataan satu baris , saya akan menggunakanif (you.hasAnswer()) you.postAnswer();
Jika bukan
you.postAnswer();
sesuatu tetapi lebih lama, sepertiyou.postAnswer(this.AnswerId, this.AnswerText, this.AnswerType);
saya mungkin akan kembali ke jenis pertama:Saya tidak akan pernah menggunakan line-break, dan saya tidak akan pernah menggunakan metode ini jika ada juga
else
pernyataan.adalah kemungkinan teoretis, tetapi bukan yang pernah saya gunakan. Ini harus diubah menjadi
sumber
Mereka seharusnya tidak; metode pertama untukku.
Ketika saya melihat yang kedua, karena garis-garis yang tidak terpakai (yang hanya memiliki kurung kurawal, selain kurung kurawal yang terakhir), rasanya seperti merusak kesinambungan kode. Saya tidak dapat membacanya dengan cepat karena saya perlu memperhatikan baris kosong yang biasanya berarti pemisahan dalam tujuan kode atau sesuatu seperti ini, tetapi tidak ada dalam kasus "baris ini milik kurung kurawal" (yang hanya mengulangi makna dari indentasi).
Bagaimanapun, sama seperti ketika Anda menulis teks ... menambahkan lekukan pada awal paragraf adalah berlebihan jika ada baris kosong sebelum (tanda ganda dari perubahan paragraf), tidak perlu membuang garis untuk kawat gigi ketika kita indentasi dengan benar.
Plus, seperti yang sudah dinyatakan, ini memungkinkan untuk memuat lebih banyak kode di layar, yang sebaliknya sedikit kontraproduktif.
sumber
Itu tergantung pada platform / bahasa / konvensi
Di Jawa:
Dalam C #
Dalam C:
Saya benci ketika orang Jawa menggunakan gaya mereka dalam kode C # dan sebaliknya.
sumber
Yang bisa saya katakan adalah bahwa jika Anda seorang penggemar metode # 3, Anda akan dianiaya oleh setiap pemformat kode IDE di bumi.
sumber
Saya menggunakan metode pertama hanya karena lebih kompak dan memungkinkan lebih banyak kode di layar. Saya sendiri tidak pernah memiliki masalah dengan pemasangan kawat gigi (saya selalu menuliskannya, bersama dengan
if
pernyataan sebelum menambahkan kondisi, dan sebagian besar lingkungan memungkinkan Anda untuk melompat ke penjepit yang cocok).Jika Anda memang perlu memasangkan kawat gigi secara visual, maka saya akan memilih metode kedua. Namun itu memungkinkan lebih sedikit kode pada satu waktu yang mengharuskan Anda untuk menggulir lebih banyak. Dan itu, setidaknya bagi saya, memiliki dampak yang lebih besar pada membaca kode daripada memiliki kawat gigi yang tertata rapi. Saya benci scrolling. Kemudian lagi, jika Anda perlu menelusuri satu
if
pernyataan, kemungkinan besar terlalu besar dan perlu refactoring.Tapi; yang paling penting dari semuanya adalah konsistensi. Gunakan satu atau yang lain - tidak pernah keduanya!
sumber
Ketika saya pertama kali belajar pemrograman pada usia 12 tahun, saya memasang kawat gigi pada baris berikutnya karena tutorial pengkodean Microsoft seperti itu. Saya juga menjorok dengan TABS 4-ruang saat itu.
Setelah beberapa tahun, saya belajar Java dan JavaScript, dan melihat lebih banyak kode kurung pada baris yang sama, jadi saya berubah. Saya juga mulai indent dengan spasi 2 spasi.
sumber
Ada opsi ke-4 yang menjaga kawat gigi tetap lurus, tetapi tidak membuang-buang ruang:
Satu-satunya masalah adalah sebagian besar autoformatt IDE mencekik ini.
sumber
Itu semua tergantung pada Anda selama Anda tidak bekerja pada suatu proyek di mana beberapa kendala pengkodean atau beberapa standar telah ditetapkan oleh manajer proyek yang harus diikuti oleh semua programmer yang mengerjakan proyek tersebut saat melakukan pengkodean.
Saya pribadi lebih suka metode 1.
Juga saya tidak mendapatkan apa yang ingin Anda tunjukkan dengan metode ke-3?
Bukankah itu cara yang salah? Sebagai contoh, pertimbangkan sebuah situasi sebagai ..
Sekarang bagaimana jika seseorang ingin menambahkan beberapa pernyataan lagi di blok if ?
Dalam hal ini jika Anda menggunakan metode ke-3, kompiler akan membuang kesalahan sintaksis.
sumber