Untuk sebagian besar ini adalah preferensi pribadi, namun ada beberapa hal yang perlu dipertimbangkan.
Kemungkinan Bug
Meskipun dapat dikatakan bahwa bug yang disebabkan oleh lupa untuk menambahkan-in kawat gigi jarang terjadi, dari apa yang saya lihat bahwa mereka tidak terjadi sesekali (tidak melupakan terkenal goto IOS gagal bug). Jadi saya pikir ini harus menjadi faktor ketika mempertimbangkan gaya kode Anda (beberapa alat memperingatkan tentang indentasi menyesatkan , jadi itu tergantung pada rantai alat Anda juga) .
Hari Code (yang berbunyi seperti itu mungkin menjadi bug)
Bahkan dengan asumsi proyek Anda tidak menderita dari bug tersebut, ketika membaca kode Anda mungkin melihat beberapa blok dari kode yang terlihat seperti mereka bisa menjadi bug - tetapi tidak, mengambil beberapa siklus mental Anda.
Kita mulai dengan:
if (foo)
bar();
Pengembang menambahkan komentar yang bermanfaat.
if (foo)
// At this point we know foo is valid.
bar();
Kemudian pengembang mengembangkannya.
if (foo)
// At this point we know foo is valid.
// This never fails but is too slow even for debug, so keep disabled.
// assert(is_valid(foo));
bar();
Atau menambahkan blok bersarang:
if (foo)
while (i--) {
bar(i);
baz(i);
}
Atau menggunakan makro:
if (foo)
SOME_MACRO();
"... Karena makro dapat mendefinisikan beberapa baris kode, apakah makro digunakan do {...} while (0)
untuk banyak baris? Seharusnya karena itu ada dalam panduan gaya kita tapi aku lebih baik memeriksa kalau-kalau!"
Contoh di atas adalah semua kode yang valid, namun semakin banyak konten dalam blok-kode, semakin banyak yang perlu Anda baca untuk memastikan tidak ada kesalahan.
Mungkin gaya kode Anda mendefinisikan bahwa blok multi-line memerlukan penjepit (tidak peduli apa, bahkan jika itu bukan kode) , tetapi saya telah melihat komentar semacam ini ditambahkan dalam kode produksi. Ketika Anda membacanya, ada sedikit keraguan bahwa siapa pun yang terakhir mengedit baris-baris itu lupa menambahkan kurung kurawal, kadang-kadang saya merasa perlu memeriksa ulang berfungsi sebagaimana dimaksud (terutama ketika menyelidiki bug di area kode ini) .
Kebisingan Diff
Salah satu alasan praktis untuk menggunakan kawat gigi untuk saluran tunggal adalah untuk mengurangi kebisingan berbeda .
Yaitu, mengubah:
if (foo)
bar();
Untuk:
if (foo) {
bar();
baz();
}
... menyebabkan garis kondisional muncul di dalam diff ketika sedang diubah, ini menambahkan beberapa overhead kecil tetapi tidak perlu.
- baris muncul sebagai sedang diubah dalam tinjauan kode, jika alat Anda berbeda berbasis kata Anda dapat dengan mudah melihat bahwa hanya kurung kurawal yang berubah, tetapi itu membutuhkan lebih banyak waktu untuk memeriksa lalu jika garis tidak berubah sama sekali.
Karena itu, tidak semua alat mendukung perbedaan berbasis kata, diff (svn, git, hg ... dll) akan menunjukkan seolah-olah seluruh baris berubah, bahkan dengan alat mewah, kadang-kadang Anda mungkin perlu dengan cepat melihat ke garis polos berbasis-diff untuk melihat apa yang berubah.
- alat anotasi (seperti
git blame
) akan menunjukkan baris sebagai sedang diubah, membuat pelacakan asal dari suatu langkah lebih banyak untuk menemukan perubahan nyata .
Keduanya kecil, dan tergantung pada berapa banyak waktu yang Anda habiskan dalam tinjauan kode atau pelacakan yang melakukan perubahan baris kode.
Ketidaknyamanan yang lebih nyata karena perubahan garis tambahan dalam diff, kemungkinan kapalnya lebih tinggi bahwa perubahan dalam kode akan menyebabkan konflik yang menggabungkan dan perlu diselesaikan secara manual .
Ada pengecualian untuk ini, untuk basis kode yang memiliki {
jalurnya sendiri - ini bukan masalah.
The diff kebisingan argumen tidak tahan jika Anda menulis dalam gaya ini:
if (foo)
{
bar();
baz();
}
Namun ini bukan konvensi umum, jadi terutama menambahkan jawaban untuk kelengkapan (tidak menyarankan proyek harus menggunakan gaya ini) .