Gömülü C – 8 : Gömülü C: Koşullamalar

Koşullamalar bildiğiniz üzere programın akışını kontrol eder. Şu dünyada en güzel akışkan su olduğundan, bu yazının teması su olacak.

KOŞULLAMALARIN DÜZGÜN KULLANILMASI

Su akar yolunu bulur demişler. Güzel kod da bu misal. İyi yazılım akışı, iyi koşullamaya çok bağlıdır. Koşullamalar düzgün yapılmadıysa, kodda mutlaka birtakın hatalar çıkacak, o kodun ne yapacağını Laplace Şeytanı dışında kimse hesaplayamayacaktır. Şimdi ilk okul yıllarımızdan tanıdığımız parantez ile başlayalım.

1. Parantez

Muhterem dostum, koşullamalar mutlaka ama mutlaka çengelli parantez ile kullanılmalıdır. Parantezsiz if-else yapmak da mümkündür ama o kod su gibi akmaz, viskozitesi yüksek olur, katranlaşır. Bir kodun genişletilebilirliği, geliştirilebilirliği, parantez kullanılmadığında çok azalır. Ayrıca hata çıkma olasılığı da artar.

Kötü Örnek:

Şimdi bu kötü örnekte acaba kodu yazan kişi, USB’ye bağlanıldığında iki iş de yapılsın istemiş de hatalı mı yazmış, yoksa birinci fonksiyon koşula bağlı, diğeri her türlü yapılsın diye mi yazılmış belli değil. Belki de ilk aşamada koşulun içinde yalnızca bir fonksiyon vardı. Kodu güncelleyen kişi, “aaa bu da yapılsın” diyerek diğer satırı eklediğinde bir felaketle karşılaşacaktır.

İyi Örnek:

Su gibi kod. İki tanecik parantezle, koşulun sınırları çizildi, akan su yolunu bulmuş oldu.

2. Karşılaştırma Sırası

Hep söylüyorum, söylemeye de devam edeceğim ki, koşullamalarda en sık yapılan hatalardan biri de == yerine = yazmaktır. Bunun çözümü, yine söylüyorum basittir. Diyelim ki, beşer şaşar misali kodu yazarken bir hata yaptık if(deger == 3) diyecekken, if(deger = 3) dedik. Bu kod hata vermez ne yazık ki ve degere 3 atanır, sular sel olur evleri barkları yıkar. Ama alışkanlığımız if(3 == deger) yazmak ise, hata yapıp if(3=deger) yazsak bile derleyici bize hata verir. Bu da ev bark kurtarır. Tabi burada 3 sayısını da kullanmamak lazım. Magic number coding konusundan bahsetmiştik. Şimdi örnekleri verelim…

Kötü Örnek:

 İyi Örnek:

 3. Koşul Derinliği

Çok derin olan her mevzu gibi, derin koşullamalar da kötü olaylara delalet eder. İnsan beyni ortalama 7 derinliğe kadar ilişki saklayabiliyormuş, bundan fazlası kafa karıştırıyor ne yazık ki. Suyu bulandırmanın anlamı yok, böyle bir ilişki varsa bile olayı basitleştirmeye çalışmakta faideler var.

Kötü Örnek:

 İyi Örnek:

 4. Koşullamalarda Makro Kullanımı

Makrolarla koşullamaları yanyana kullanmak ateşle barutu yan yana tutmaya benzer. Çok çok dikkatli olmak gerekir. Makrolar’ın do, while ya da benzer bir yapıda kullanılmasında faideler vardır. Lafı çok uzatmadan iki örnekle açıklayacağım.

Kötü Örnek:

Bu kod, derleyici tarafından aşağıdaki şekilde genişletilir:

Ki bu yazım zaten dilin tabiatına yani doğanın kanunlarına aykırıdır. Bu durumda, görülen else, artık if’e ait değildir. Bu da öngörülemez felaketlere sebep olabilir. If’de parantez kullanılmaması da hatalara çanak tutmuştur.

İyi Örnek:

Yukarıdaki kod ise, parantezler konmasa bile çalışacaktır. Kodu genişlettiğimizde hiç bir hata oluşamayacağını görmek mümkündür. Fonksiyonel makroların, do while içinde tanımlanması, su gibi aziz bir alışkanlıktır.

 5. Parametre Dönüşümü

Bazen koşul, ister istemez karmaşık olur ve çok sayıda koşulun hikmetini çözmek hakikaten zordur. Bu durumda parametre dönüşümü yapmakta sayısız feyizler vardır. Bu parametreler toplanarak anlamlı tek bir parametreye aktarılabilmektedir.

Kötü Örnek:

 İyi Örnek:

Artık o kadar koşulun ne işin gerektiğini anlayabiliyoruz. Adam araba sürebilir mi süremez mi basitçe buna karar veriliyor.

 Burada anlaşılabilirlik uğruna bir byte’ın kurban edildiğinin bilincinde olmakta fayda var. Değer mi? Bence değer. 

Şimdi devam!

Önceki Sayfa   Sonraki Sayfa

 

Leave a Reply