Indent Styles hakkındaki Wikipedia makalesini okudum , ancak hala anlamıyorum. K&R ve 1TBS arasındaki fark nedir?
Indent Styles hakkındaki Wikipedia makalesini okudum , ancak hala anlamıyorum. K&R ve 1TBS arasındaki fark nedir?
Yanıtlar:
K & R ve One True Brace Stil (1TBS) arasındaki en büyük fark 1TBS içinde, hepsi bu mu if
, else
, while
, ve for
gerekli olmasa bile, ifadeleri açılış ve kapanış diş telleri var. Amaç, yeni ifadeler eklemeyi ve tam olarak nasıl gruplandırılacağını 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");
}
K & R şöyle:
if (x)
a();
else {
b();
c();
}
Yani: yalnızca gerektiğinde kullanılan diş telleri, kontrol ifadesiyle aynı satırda destek açma, kendi satırında destek açma.
"Gerçek bir ayraç stili" (1TBS veya OTBS), denetimli bir ifadeyi ayraç içine alarak bileşik bir ifadeye dönüştürür:
if (x) {
a();
} else {
b();
c();
}
Allman stili 1 TB'dan biraz daha ileri gider ve açılış ayracını bir çizgiye kendi başına yerleştirerek dikey boşluğu zorlar:
if (x)
{
a();
}
else
{
b();
c();
}
Düzenle:
Hala söyleyecek "kibirli" olarak nitelendirir tam olarak nasıl anlamaya çalışıyorum "Dennis Ritchie bir oldu son derece sadece iyi bir dil icat değil, aynı zamanda bunun için gerçekten iyi bir bağ stili ile geldi değil zeki çocuk."
Yine de kibirli olmak konusunda ısrar edenler için, işte size biraz zorluk: Sourceforge, Github (vb.) 'E gidin ve K&R brace stilini kullanarak projeler seçin. Hata ve taahhüt kayıtlarını inceleyin ve kullandıkları ayraç stilinin neden olduğu tek bir hata bulmaya çalışın .
Bu kadar iş yapmak istemiyorsanız, basit bir istatistiksel analiz yapmayı deneyin. Farklı ayraç stilleri kullanarak projeleri karşılaştırın ve "çiftçilik" gösterip gösteremeyeceğinizi görün - böcek sayma stilinde (önem derecesi vb.) Destekleme stiliyle ilişkilendirilen istatistiksel olarak önemli bir fark.
Bunların her ikisini de birkaç yıl önce yaptım ve canlandırıcı stillere atfettiğim tek bir hata bulamadım ya da ikisi arasında istatistiksel olarak anlamlı bir korelasyona yaklaşan bir şey bulamadım. Ortalama olarak, kullananlara K & R takviye biraz daha az hata vardı, ancak aradaki fark çok anlamlı olarak tanımlanamayacak kadar küçük.
Bu ortaya çıktığından beri, çok-durumlu makroların bulunduğu durum hakkında yorum yapacağım. Birden fazla ifade içeren ancak bunları parantez içine almayan bir makroda bir hata vardır. Benim işim o hatayı kapsayan bir kod yazmak değil . Aksine, benim işim bu hatayı olabildiğince çabuk bulmak ve ortadan kaldırmak.
Kodlama hatalarını ümit etmek umuduyla, teşhis edilmeden kalmaları ve düzeltilmemeleri, düpedüz kötülüktür. İsterseniz o kibirli olarak adlandırın, ancak bunu pazarlığa yakın bile görmüyorum. Hatalar örtülmemeli, bulunmalı ve düzeltilmelidir. Var olan ne kadar uzun olursa, düzeltilmesi çok daha zor ve pahalı hale gelecektir.
if
Ondan sonra girintili ifadelere sahip bir ifade var, bu yüzden her ikisinin de şartlı olarak yürütüldüğü görülüyor. Ama hiç parantez yok! İkinci ifade, gerçekte ötesindedir if
ve daima çalıştırılacaktır, böylelikle böcek.
Genel olarak KR brace stiliyle ilgili sorun kod yeniden düzenleme şeklindedir. Bir kod etrafında hareket ettirildiğinde, bir şeyin etrafında hiç parantez bulunmadığını kaçırmak kolaydır, yanlış hareket ettirin (veya koşullu olarak yürütüldüğünü düşünerek bir şeyi hareket ettirin) ve sonra artık bir şey çalışmadığında kafanızı çizin ya da talihsiz olun ve olun. iyi test edilmemiş bir kod alanı ve siyah şapka onu kullanmanın bir yolunu bulana kadar hata fark edilmeden gider. Hata ayıklayıcısına hızlı bir yolculuk, onu fark ederseniz kolayca sorunu bulur, ancak bunu yapmazsanız ...