Saya telah membaca artikel Wikipedia tentang Indent Styles , tetapi saya masih tidak mengerti. Apa perbedaan antara K&R dan 1TBS?
Saya telah membaca artikel Wikipedia tentang Indent Styles , tetapi saya masih tidak mengerti. Apa perbedaan antara K&R dan 1TBS?
Jawaban:
Perbedaan terbesar antara K & R dan Benar Brace Style One (1TBS) adalah bahwa dalam 1TBS, semua if
, else
, while
, dan for
pernyataan memiliki membuka dan menutup kawat gigi, bahkan jika mereka tidak diperlukan. Tujuannya adalah untuk memudahkan memasukkan pernyataan baru dan tahu persis bagaimana mereka akan dikelompokkan.
Sebagai contoh:
K&R:
int i;
for (i = 0; i < 10; i++)
printf("Hi.");
1TBS:
int i;
for (i = 0; i < 10; i++) {
printf("Hi");
}
K&R seperti ini:
if (x)
a();
else {
b();
c();
}
Yaitu: kawat gigi yang hanya digunakan jika diperlukan, membuka brace pada baris yang sama dengan pernyataan kontrol, menutup brace pada jalurnya sendiri.
"One true brace style" (1TBS atau OTBS) mengubah pernyataan terkontrol tunggal menjadi pernyataan majemuk dengan melampirkannya dalam kurung:
if (x) {
a();
} else {
b();
c();
}
Gaya Allman sedikit lebih jauh dari 1TBS, dan memaksa spasi vertikal dengan menempatkan brace pembuka pada sebuah garis dengan sendirinya juga:
if (x)
{
a();
}
else
{
b();
c();
}
Sunting:
Saya masih mencoba mencari tahu persis bagaimana itu memenuhi syarat sebagai "sombong" untuk mengatakan "Dennis Ritchie adalah orang yang sangat cerdas yang tidak hanya menemukan bahasa yang baik, tetapi juga muncul dengan gaya penjepit yang sangat bagus untuk itu."
Bagi mereka yang bersikeras bahwa itu sombong, inilah tantangan kecil: pergi ke Sourceforge, Github (dll) dan memilih proyek menggunakan gaya penjepit K&R. Telusuri catatan bug dan komitmen mereka, dan cobalah untuk menemukan satu bug yang disebabkan oleh gaya kurung yang mereka gunakan.
Jika Anda tidak ingin melakukan banyak pekerjaan, coba lakukan analisis statistik sederhana. Bandingkan proyek-proyek yang menggunakan gaya penyangga yang berbeda, dan lihat apakah Anda dapat menunjukkan "bimodality" - perbedaan yang signifikan secara statistik dalam jumlah bug (keparahan, dll.) Yang berkorelasi dengan gaya penyangga.
Saya melakukan keduanya ini beberapa tahun yang lalu, dan tidak dapat menemukan satu bug pun yang dapat saya kaitkan dengan gaya menguatkan, saya juga tidak dapat menemukan apa pun yang mendekati korelasi yang signifikan secara statistik antara keduanya. Rata-rata, mereka yang menggunakan K & R bracing memiliki sedikit lebih sedikit bug, tapi perbedaan itu jauh terlalu kecil untuk memenuhi syarat sebagai signifikan secara statistik.
Sejak itu muncul, saya akan mengomentari situasi dengan makro multi-pernyataan. Makro yang mencakup beberapa pernyataan tetapi tidak mengelilinginya dengan kawat gigi itu sendiri, memiliki bug. Pekerjaan saya bukanlah menulis kode yang menutupi bug itu. Justru sebaliknya, tugas saya adalah menemukan dan memberantas bug itu secepat mungkin.
Menulis kode dengan harapan menutupi bug sehingga mereka tetap tidak terdiagnosis dan tidak diperbaiki benar-benar jahat. Sebut itu sombong jika Anda suka, tapi saya tidak melihat ini sebagai hampir bisa dinegosiasikan. Bug harus ditemukan dan diperbaiki, tidak ditutup-tutupi. Semakin lama ada, semakin besar kemungkinan mereka akan menjadi jauh lebih sulit dan mahal untuk diperbaiki.
if
pernyataan dengan pernyataan lekukan setelahnya, sehingga tampak bahwa keduanya dieksekusi secara kondisional. Tapi tidak ada kawat gigi! Pernyataan kedua benar-benar di luar if
dan akan selalu dieksekusi, dengan demikian bug.
Masalahnya, secara umum dengan gaya penjepit KR adalah dalam kode refactoring. Ketika memindahkan kode di sekitar itu mudah untuk dilewatkan bahwa tidak ada kawat gigi di sekitar sesuatu, pindahkan salah (atau pindahkan sesuatu di bawahnya dengan berpikir bahwa itu dijalankan secara kondisional) dan kemudian garuk-garuk kepala Anda ketika sesuatu tidak lagi berfungsi, atau disayangkan dan berada di area kode tidak diuji dengan baik dan bug tidak diketahui sampai topi hitam menemukan cara untuk mengeksploitasinya. Perjalanan cepat ke debugger dengan mudah menemukan masalah jika Anda menyadarinya, tetapi jika Anda tidak ...