C dilinde, if yapısının içindeki tek bir ifade için küme parantezlerinin atlanmasına izin verilmiştir. Bu, kodu daha kompakt hale getirmiştir, ancak özellikle genişletme ve değişiklik sırasında birçok gizli hataya yol açmıştır. Tarihsel neden — yerden tasarruf ve minimalist durumlar için sözdiziminin basitliği.
Problem, geliştiricinin parantez olmadan if'in sadece hemen ardından gelen ilk ifadeyi kontrol ettiğini unuttuğunda ortaya çıkar: tüm sonraki ifadeler koşulsuz bir şekilde çalıştırılır, bu da görsel olarak anlaşılmaz görünebilir. Bu tarz, kod okunurken ortaya çıkan hataları gizleyen, yanlış tablama veya yeni satır eklemeden kaynaklanan hatalara yol açar.
Çözüm — her zaman küme parantezleri kullanmaktır, hatta sadece bir ifade olsa bile. Bu, kodun okunabilirliğini ve güvenliğini artırır.
Kod örneği:
// Kötü: if (x > 0) do_something(); do_other(); // Her zaman çalışır // Daha iyi: if (x > 0) { do_something(); do_other(); }
Anahtar özellikler:
Girinti (tab/space) if'in kapsamını etkiler mi?
Hayır, C dilinde kapsam yalnızca parantezler ile belirlenir, girintilerle değil.
Bu kodun davranışı ne olacaktır?
if (a > 0) fun1(); fun2();
fun1() yalnızca a > 0 ise çağrılır, fun2() koşuldan bağımsız olarak her zaman çağrılır.
Yeni bir satır eklerken parantezleri eklemeyi unutmamanın sonuçları nelerdir?
Bu kod davranışı değiştirebilir ve görsel olarak tespit edilmesi zor hatalara yol açabilir, çünkü girintiler derleme hatalarına karşı koruma sağlamaz.
Geliştirici, parantez eklemeyi unutarak tek satırlık bir if ifadesine ikinci bir ifade ekledi.
if (user) initialize(); log_access();
Artıları:
Eksileri:
Geliştirici, tek bir ifade için bile her zaman küme parantezi kullanıyor:
if (user) { initialize(); log_access(); }
Artıları:
Eksileri: