Gömülü C – 4 : Sabitler ve Yorum Satırları

Önceki yazıda veri tipleri, değişkenler ve isimlendirmeden bahsetmiştim. Bu yazıda yorum satırlarından ve sabitlerden kısaca bahsedeceğim.

NŞA’da sabitler ve yorumlarla ilgili bahsedilebilecek şeyleri zaten okuduğunuzu / bildiğinizi varsayıyorum. Nitekim herhangi bir C kitabında ya da tutorial’inde mutlaka bir takım temel şeyler yer alıyor. Bu kısımda yine birazcık daha fazlasına değinmeye çalışacağım 🙂

YORUMLAR

C dilinde yorum satırları iki şekilde yazılır. Her iki duruma da örnek olarak aşağıdaki kod parçası örnek gösterilebilir:

Gördüğünüz gibi tek satırlık bir yorum yazmak için “//yorum”, çok satırlı yorum yazmak için ise “/* yorum */” kullanılır. Yıldızlı olan blok yorum esasen C++’da olan bir özellik olup sonradan faideleri görülüp C’ye de aktarılmıştır. Yorumun program için açıklayıcı olmasına dikkat edilmelidir.

SABİTLER

C dilinde yaratılan değişkenler, bellekte bir adreste saklanırlar. Bu değişkenlerin saklanış şekillerini bir önceki yazıda incelemiştik. Bu değişkenleri yaratırken, değişkenlerin bir işe yaramasını istiyorsak, değişkenlerin değer alması mecburi olacaktır. İşte bu değer atamasında, bir değişkeni başka bir değişkene atayabileceğimiz gibi, bir değişkene sabit bir değer de atayabiliriz. Misal,

Değişkene sabit değer ataması yapılırken, sabitin boyutunun değişkenin boyutu ile uyumlu olmasına dikkat etmek gerekir. Misal 8 bitlik bir değişkenin alabileceği azami değer 255 iken ona gidip 65372 gibi bir değeri atamaya çalışmamak gerekir. Ama oldu ki atadık, ne olacağını da bilmemiz gerekir. Bu durumda değişkene 65372’nin 255 modundaki değeri atanır. Bu da değerin bellekteki yerleşiminin düşük öncelikli byte’ı demektir. Tabi bu derleyiciden derleyiciye değişir.

AĞZIMDAKİ BAKLA

Şimdi gelelim asıl mevzuya… Esasen yorum satırları yazılım dünyasında büyük tartışmalara sebep olmuştur. Hatta benim de bir mensubu olduğum “birileri” yorum satırlarının mecburi durumlar dışında kullanılmaması gerektiği, gerektiği yerde de kullanılmamasının hata olduğu yönünde görüş bildirmiştir. Okulda ders aldığım hocamın da mensubu olduğu “birileri” ise, yorumsuz kodu koddan saymamış, reddetmiş, sıfır vermiş, onu hakir görmüştür.

Şimdi mevzu aslında yorum olup olmaması değil bence. Her ne kadar bu konuda bir taraf olsam da, görüşümü detaylıca açıklayacağım. Sonrasında yolunuzu seçmek üzere karar size ait 🙂 Ben derim ki, bir yazılım, baştan iyi tasarlanmış olmalıdır, iyi implemente edilmiş olmalıdır, iyi yazılmış olmalıdır. Yani kod öyle yazılmalıdır ki, ne iş yaptığını zaten anlatmalıdır. Bunu sadece ben de söylemiyorum “self-descriptive” yani kendini ifade eden kodlama, bir yazılım kalitesi unsuru olarak literatürde bakidir. Sonuçta C,C++,Java ne olursa olsun söz konusu araç bir dildir ve dilin kuralları herkes için ortaktır. int i=5 derken, dili bilen herkes i diye bir değişkenin, int cinsinden yaratıldığını ve ona 5 değerinin atandığını bilir. Sorun, bu 5 değerinin ne olduğudur ve i’ye niye atandığıdır. i’nin neden int olduğu ve neden 5’in ona atandığı da diğer sorular tabi ki. Şimdi kimisi der ki ben pis pis kodumu yazarım, üstünü de yorumla sıvarım. Nasıl mı? Misal:

Şimdi bu kodu yazan adamın arkasından nasıl konuşulur? Şöyle… Kardeş, kafan çok güzelmiş kodu da öyle yazmışsın, zahmet edip yorum da yapmışsın ama bu dizi kim? 255 dizinin neden son indeksi? Madem bu değişken bir dizinin son indeksi, değişkenin adını felancaDizininSonIndeksi filan diye koysan ne olurdu? Madem bu dizinin son indeksi 255, sen o bilgiyi başka bir yerde de kullanacaksın ve yine ne olduğunu kimse bilmeyecek. O bilgiyi etiketlesen canın mı çıkardı?

Ve nihayetinde o bildiğiniz acı son ile kodu yazan kişinin arkasından bir güzel dualar edilirdi.Bir de aşağıdaki satırı yazan kodcu var tabi…

Önce hiç bir şey denmez, çünkü herşeyi anlamış olmanın verdiği aydınlanma hissi bedeni kaplar. Yani neticede bir kodda bir sürü yerde 255 değerinde bir şeyler olabilir ama hangisinin ne anlama geldiğini anlatmak etiketler olmadan çok zordur. Etiket dediğim de #define ile yazdığım şey. Bu sayede kodda 25 geçtiği zaman o 25’in oda sıcaklığı mı yoksa, amerikanın bir eyaletindeki ehliyet alma yaşı mı olduğunu anlayabiliriz. Bu olaya “MAGIC NUMBER CODING” deniyor. Kodda nereden peydah olduğunu bilmediğimiz sabit değerler olmamalı 🙂 Yazılımda zaten mevzuyu anlamak zor, bir de yorumlarla sabitler doğru kullanılmadı mı olay epey işgenceye dönüyor doğrusu.

Şimdi bir diğer önemli konu da veri ve bilgi kavramlarının farklılığı.Programlamada birbirine en çok karıştırılan kavramlardan biri de bilgi ve veri kavramlarıdır. Eee haliyle çok sayıda yanlışlık da yapılıyor. Örneğin bir 3. sınıf öğrencisininn ‘A’ sınıfında olması bir bilgidir. O bilgi, sayısal karşılığı 0x41 yani 65 olan veri ile ifade edilebilir. Buradaki 65 sayısı, konu içeriği bilinmeyen bir veridir. Keza ülkemizde erkekler için emeklilik yaşı da 65’tir. Yani bu bilgi de ‘A’ ile aynı şekilde bellekte saklanmaktadır. Aaaaaa?

i=’A’, i=65, i=0x41;

Bunların hepsi aynı değerde olan atamalar. Demek ki biz söz konusu içeriği farklı şekilde sunsak, anlamlandırsak da (bilgi), bu anlamlandırmanın bellekteki yerleşimi aynı olabiliyormuş. Biz sadece okuyan adam daha iyi anlasın diye sınıfı gösteren değişkene ‘A’ verisini(değerini) atadık, emeklilik yaşına da 65’i atadık. Bu yaklaşımın değişkenin adını düzgün koymaktan bir adım öteye gittiğini lütfen kaçırmayalım. Sonuçta her iki durumda da derleyici bu ifadeleri 65 sayısına çevirecek ve bu veriyi bellek gözüne yazacak. Demek ki neymiş? Sabit’i atarken bile o bilgiyi ifade etme şeklimiz, iyi kod yazmak için, anlaşılabilir olmak için çok çok önemliymiş. Buradan çıkarılacak sayısız ibretler var. Parçaları birleştirecek olursak aslında ‘A’,65 gibi sayıları kodun çeşitli yerlerinde tekrar tekrar yazacağımıza, #define ile etiket oluşturup o etiketi kullanmakta büyük feyizler var.

Bu konunun bir örneği de printf ile verilebilir. Gömülü sistem yazılımcıları, çok pahalı bir fonksiyon olabildiği için printf’e karşı çok mesafeli olsa da, konsepti anlatabilmek adına örneğimizi onun üzerinden vermemiz mümkün.

Bu kodu çalıştırdığınızda her seferinde aynı veriyi yazdırmanıza rağmen, sırayla ‘A’, 65 ve 41 görürsünüz. Bu bellekteki verinin bilgiye dönüşümüdür. Üzerinde düşünüldüğünde burada da sayısız ibretler vardır.

Neticede ağzımdaki baklayı çıkardım. Yorum satırlarının kullanımı ile ilgili felsefemi aktardım. Karar sizin. Kararınıza sadık kalınız.Ardından sabitlerle ilgili çok önemli olduğunu düşündüğüm kavramları aktarmaya çalıştım. Umuyorum bir şeyler katmıştır, şimdi devam 🙂

Önceki Sayfa   Sonraki Sayfa

Leave a Reply