it-swarm.asia

K&R ve One True Brace Style (1TBS) stilleri arasındaki fark nedir?

Girinti Stilleri Wikipedia makalesi okudum, ama hala anlamıyorum. K&R ve 1TBS arasındaki fark nedir?

48
GavinR

K&R ve One True Brace Style (1TBS) arasındaki en büyük fark, 1TBS'de tüm if, else, while ve for ifadeleri gerekli olmasa bile, açma ve kapatma parantezleri var. Amaç, yeni ifadeler eklemeyi ve bunların nasıl gruplandırılacağını tam olarak bilmeyi kolaylaştırmaktır.

Örnek olarak:

K & R:

int i;
for (i = 0; i < 10; i++)
  printf("Hi.");

1TBS:

int i;
for (i = 0; i < 10; i++) {
  printf("Hi");
}
76
Thomas Owens

K&R şöyle:

if (x) 
    a();
else {
    b();
    c();
}

Yani: sadece gerektiğinde kullanılan parantezler, kontrol ifadesiyle aynı satırda küme ayracı, kendi satırında küme ayracı.

"Bir gerçek küme ayracı stili" (1TBS veya OTBS) tek bir kontrollü ifadeyi parantez içine alarak bileşik ifadeye dönüştürür:

if (x) {
    a();
} else {
    b();
    c();
}

Allman stili 1TBS'den biraz daha ileri gider ve açılış ayrağını kendi başına bir çizgiye yerleştirerek dikey aralığı zorlar:

if (x) 
{
    a();
}
else 
{
    b();
    c();
}

Düzenle:

Hala "Dennis Ritchie sadece iyi bir dil icat etmekle kalmayıp, aynı zamanda gerçekten iyi bir parantez ortaya çıkaran son derece akıllı bir adamdı. onun için stil. "

Zaten kibirli olmakta ısrar edenler için, işte küçük bir meydan okuma: Sourceforge, Github (vb.) 'Ye gidin ve K&R brace stilini kullanarak projeleri seçin. Hata ve taahhüt kayıtlarını gözden geçirin ve kullandıkları küme ayracı stilinin neden olduğu single hatasını bulmaya çalışın.

Bu kadar iş yapmak istemiyorsanız, basit bir istatistiksel analiz yapmayı deneyin. Farklı küme ayracı stilleri kullanarak projeleri karşılaştırın ve "bimodality" gösterip gösteremeyeceğinizi görün - destekleme stiliyle ilişkili olan hata sayılarında (önem derecesi vb.) İstatistiksel olarak anlamlı bir fark.

Bunların ikisini de birkaç yıl önce yaptım ve canlandırıcı stillere atfedebileceğim tek bir hata bulamadım, ikisi arasında istatistiksel olarak anlamlı bir korelasyona yaklaşan hiçbir şey bulamadım. Ortalama olarak, K&R desteklerini kullananlarda biraz daha az hata vardı, ancak fark çok istatistiksel olarak anlamlı olarak nitelendirilemeyecek kadar küçüktü.

Ortaya çıktığından beri, çok ifadeli makrolarla durum hakkında yorum yapacağım. Birden çok ifade içeren ancak bunları parantez içine almayan bir makroda hata var. Benim işim not Bu hatayı kapsayan bir kod yazmak. Aksine, işim bu hatayı mümkün olan en kısa sürede bulmak ve ortadan kaldırmaktır.

Teşhis edilmemiş ve sabitlenmemiş böcekleri örtme umuduyla kod yazmak düpedüz kötülüktür. İsterseniz bunu kibirli olarak adlandırın, ama bunu pazarlığa yakın bile görmüyorum. Hatalar bulunmalı ve düzeltilmelidir, örtülmemelidir. Ne kadar uzun süre mevcutsa, düzeltilmesi çok daha zor ve pahalı hale gelme olasılığı o kadar yüksektir.

20
Jerry Coffin

Genel olarak KR küme ayracı stili ile ilgili sorun kod yeniden düzenleme aşamasındadır. Kodu hareket ettirirken, bir şeyin etrafında herhangi bir parantez olmadığını, yanlış hareket ettirdiğini (veya koşullu olarak yürütüldüğünü düşünerek bir şeyi taşıyın) kaçırmak kolaydır ve daha sonra bir şey artık çalışmadığında başınızı çizin veya talihsiz olun ve içinde olun. iyi test edilmemiş bir kod alanı ve siyah bir şapka onu kullanmanın bir yolunu bulana kadar hata fark edilmez. Hata ayıklayıcıya hızlı bir yolculuk, fark ederseniz sorunu kolayca bulur, ancak ...

10
Justin Swanhart