Önceki yazımda C# dilinin temelinde yer alan .NET çatısının yapısını incelemiş, 2000’li yıllardan sonraki tarihi süreci sizlere aktarmıştım. Söz dizimi C/C++ dillerine benzeyen C# özellikle bu dillerden birini veya JAVA kullanmış deneyimli programcılar için alışması çok kolay bir dil. Bu sebeple daha önceden farklı dillerde program yazmış okurlarımız söz dizimine alıştıktan sonra .NET çatısının bizlere sunduğu kütüphaneleri kullanarak farklı uygulamalar geliştirmeye kolayca başlayabilirler. Ancak biz yazı dizimizde programlama dünyasına yeni adım atacak okurlarımızı da düşünerek sayfalarımızda programlama dilinin detaylarına da değinmeye çalışacağız.

İlerideki eğitimlerimizde Windows Forms uygulamaları geliştirerek grafik arayüze sahip (GUI – Graphical User Interface) programların C# kullanarak ne kadar kolay hazırlayabileceğimize şahit olacağız. Ancak bu safhaya gelmeden önce temel programlama içeriğini işlerken genelde konsol uygulamaları üzerinden örnekler geliştireceğiz. DOS işletim sistemine aşina okurlarımızı eski zamanlara götürecek bu tür uygulamalar Windows Komut İstemi altında çalışan temel projeler. Eğitimlerimizi takip edenlerin hatırlayacağı gibi, Visual Studio altında yeni proje oluştururken “Console Application”’u seçerek bu türde uygulama hazırlamaya başlayabiliriz. Uygulamamızı derlemeden önce Ctrl+F5 tuşlarına basarak çalıştırabiliyoruz. Geliştirme ortamımızı anlattıktan sonra C# ile program yazmaya hazırız demektir.

İlk yazımızda C#’ın bir süslü parantez ( { } )  dili olduğundan bahsetmiştik. Aslında söylemek istediğimiz bu parantezler arasında kod blokları oluşması, fonksiyon ve kontrollerin içerisindeki kodların yine bu parantezler arasında yer almasıdır. Bu kod blokları arasında gerçekleştireceğimiz bütün eylemlerin sonuna noktalı virgül “;” koyarak komutu tamamlamayı unutmamalıyız. Yazdığımız her program çalışmak için “Main” olarak isimlendirilen ana fonksiyona başvurur. Yeni proje açtığınızda oluşturulan Program.cs dosyası içerisindeki Main fonksiyonu altındaki kod bloğunun sahip olduğu süslü parantezler ( { } ) arasına hazırladığımız örnek kodları yazabilirsiniz. Bunun yanında, derleyici tarafından dikkate alınmayan, sadece not tutmak için kullanılan yorum satırları oluşturmak için tek satırlık // karakterlerini kullanabilir, ya da satır sınırlaması olmayan yorum bölümlerini /* ve */ arasına metin yazarak oluşturabilirisiniz.

DEĞİŞKENLER

Matematik derslerinde denklemler ile hayatımıza giren değişken ifadesi, programlamada en çok kullandığımız yapıların başında geliyor. Belirli bir değeri bilgisayarın belleğinde (Random Access Memory – RAM) tutmak istediğimizde bir değişken tanımlıyor ve yeri geldiğinde tanımladığımız bu değişkenin değerini istediğimiz gibi değiştirebiliyoruz. Mantıksal, sayısal ve karaktersel değerler alan değişkenler için bellekte sabit bir yer ayrılmakta. Ancak bir değişken kullanıldığı yere göre daha az veya fazla bellek alanına ihtiyaç duyabilir. Örneğin bellekte tutulan sayısal değerleri düşünün. İkili sistem ile bellekte tutulan sayı değerleri, sayının büyüklüğüne göre farklı bellek alanı işgal edecektir. Bu durumda bir basamaklı bir sayı için en fazla 5 bitlik bir alan ayrılması yeterliyken, basamak sayısı arttıkça ihtiyaç duyulan bellek miktarı da artmakta. Eğer biz bir değişkende tek basamaklı bir sayı tutacaksak, o sayı için bellekte 32 bitlik bir alan ayırmamız halinde belleği etkin kullanmamış oluruz. Etkin bellek kullanımını sağlamak amacıyla programlama dilleri içerisinde farklı boyutlarda değişken türleri mevcuttur.

Tablo 1’de (yazının sonunda) görebileceğiniz değişken türleri arasında sayı değeri tutan tiplere bakacak olursanız “short” tipi bir değişken 16 bit olup en fazla 5 basamaklı bir sayı tutabilirken, “integer” 10, “long” 19 basamaklı sayılara kadar veri saklayabilir. Bu sayılar negatif değer alabiliyorken, işareti olmayan “unsigned” tipler sadece pozitif değer alabilmekte, böylelikle daha fazla basamaklı sayıları aynı miktarda bellek harcayarak tutabilmektedir (uint, ulong gibi). Sayılar konusunda diğer bir önemli nokta, ondalık değerlere dikkat etmenizin gerekmesi. Ondalık değerleri bellekte tutmak için, boyutları değişen “float” ve “double” tipi değişkenler kullanıyoruz.

Mantıksal değişkenler ise, sadece doğru (True)  ya da yanlış (False) değerini tutabilen 1-bit boyutunda veri tipleridir. Yine ortaöğrenim sırasında mantık derslerinden aşina olduğunuzu düşündüğüm bu yapılar, Boolean değişkenler olarak adlandırılır. Tutulan bu mantıksal değerler, program akışında gidilen yolu değiştiren koşullar içerisinde kullanılır. Diğer dillerden farklı olarak bu değişkenleri tanımlamak için kısaca “bool” yazıyoruz. Ayrıca true ve talse değerlerinin baş harflerinin küçük olması önemli.

İlk örneğimizin kodları

CHAR  vs. STRING

Karakter tutan “char” veri tipi, C/C++ zamanından günümüzü yapısını bozmadan gelmeyi başarmış. Öncelikle sadece ikili tabanda sayı saklayabilen bilgisayar belleklerinin karakterleri nasıl hafızasında tutabildiğinden bahsedelim. Noktalama işaretleri, rakamlar ve harflerden oluşan karakter dizisi elemanları, ASCII kodu adı verilen bir sayıya eşitlenmiştir. Büyük ve küçük harfler için farklı olmak üzere bütün bu elemanların http://en.wikipedia.org/wiki/Ascii_table adresinde inceleyebileceğiniz gibi bir sayı değeri vardır. İşte char veri tipi, programcının kendine atadığı bir karakteri bu sayı değerine eşitleyerek bellekte saklar. Burada programcı olarak sizin yapmanız gereken, kod içerisinde tanımladığınız değişkenin karakter olduğunu belirtmek için onu tek tırnak ( ‘’ ) içerisine almanız.

Ancak tek karakterin bellekte saklanması her zaman sizin için yeterli değildir. Bir kelime ya da cümleyi değişken içerisinde saklamak istediğinizde eski programlama dillerinde karakter dizileri oluşturmanız gerekmekteydi. Ancak C# gibi yeni nesil programlama dillerinde bu işi string adı verilen ikincil değişken tipleri kendiliğinden yapıyorlar. Böylelikle belirli bir metni tırnak işaretleri (“”) arasına yazarak değişken içerisinde saklayabiliyorsunuz. Aklınıza bu metin içerisinde tırnak işareti kullanmak geldiyse, onun için kaçış işlemi uygulamanız gerekmekte. String değişkenlerine özgü bu işlemde kullanmanız sakıncalı olan karakterlerin başına “\” işareti koyarak metnin içerisinde bulunmasını sağlayabilirsiniz. Mevcut kaçış işlemlerinin yapılabildiği karakterler: ‘ (tek tırnak), “(çirt tırnak), \(ters eğik çizgi), n (yeni satır), t (sekme). Aslında birçok char değişkeninin birleşiminden oluşan string, değişken gibi kullanılsa da bir veri yapısından ibarettir. Bu yüzden string değişkenlerinin bellekte kaplayacağı sabit bir boyut bulunmaz.

İlk programımızı çalıştırdık.

OPERATOR KULLANIMI

Farklı değişken tiplerini anlattıktan sonra, bu değişkenleri kod içerisinde nasıl kullanacağımızdan bahsetmemiz gerek. Tablo 2 içerisinde gördüğünüz programımızda farklı değişken tipleri tanımladık ve bu değişkenleri  Console.WriteLine() fonksiyonunu kullanarak konsolda yazdırıyoruz. Bu programı incelersek, önce kullanacağımız değişkenin tipini yazıyor, sonra ona bir isim veriyoruz.  Bu andan itibaren program kodunun içerisinde bu ismi kullanarak değişkeni çağırmamız mümkün. Değişkenlere değer atamak için eşittir “=” karakterini kullanıyoruz. Bir değişkene değerini onu tanımladığınız satırda ya da farklı bir satır içerisinde atayabilirsiniz, istediğiniz yerde değiştirebilirsiniz.

Eğer tipleri aynı ise, bir değişkenin değerini başka bir değişkene atamanız mümkün.  Ancak sayısal değişkenlerde işler biraz karışıyor;  bellekte kapladığı alandan daha büyük boyuta sahip olanların atamasına izin verilmiyor. Yani bir int değerini long’a atayabilirsiniz, ancak bunun tersi mümkün değil. Bu atamalar sırasında aritmetik işlemler yapmaya ihtiyaç duyduğunuzda C# operatörleri yardımınıza yetişecektir. Tablo 3 içerisinde görebileceğiniz örneğimizdeki gibi kullanabileceğiniz toplama (+), çıkarma (-), çarpma (*), bölme (/) ve mod (%) operatörleri ile değişkenleri ve rakamları sayısal işlemlere tabi tutabilirsiniz. Bunun dışında + operatörünü string ifadeleri birleştirmek için de kullanabiliyorsunuz. Aritmetik işlemler arasında bir sıra olması gerektiğinde işlem içinde parantezler kullanabiliriniz. Matematik kurallarından bildiğimiz gibi, parantez olmadığı zaman önce / ve * operatörleri, daha sonra + ve – operatörleri işletilir.

Bu örneğimizde değer ataması yaparken operatörleri kullanıyoruz.

İSİMLENDİRME SANATI

Değişkenlere vereceğiniz isim konusunda özgür olmakla beraber, kod uzadıkça kafanızın karışmaması ya da yıllar sonra koda baktığınızda neler olup bittiğini anlayabilmeniz için anlaşılır isimler seçmenizi tavsiye ederim. Özellikle başka insanların da yazılan kodu çözebilmesi için yorumlara önem vermek, fonksiyon ve değişken isimlerini anlaşılır yapmak oldukça önemlidir. Bu konuda her programcının kendine özgü bir stili olsa da, kelimelerin baş harfini büyük yapmak (ör: int piSayisi; ) ya da alt çizgi kullanmak (pi_sayisi) gibi bir yöntem benimsemeniz iyi olacaktır. Bunların dışında Türkçe karakter kullanmaktan ve rakam ile başlayan değişken isimlerinden kaçının.

Hazır değişken tiplerini anlatmışken, C# 3.0 sürümü ile birlikte gelen bir yenilikten bahsetmeden geçmeyelim. Yeni sürüm beraberinde tip ayrımı gözetmeyen ortak bir değişken getiriyor. Tablo 4’te ki örnekte görebileceğiniz üzere “var” anahtar sözcüğü ile tanımlanan değişkenler, atanan ilk değerin tipine dönüşerek program içerisinde kullanılıyorlar. Özellikle farklı tipte verilerin gelebildiği veritabanı uygulamaları için kullanışlı bir özellik olduğunu söyleyebiliriz. Değişken ve operatörlere ait eğitimimizi burada bitirirken, yaptığımız örnekleri deneyip değişik varyasyonlar deneyerek çalışmanızı tavsiye ederim.

Ortak veri tipi ile değişkenlerinizin tipi ilk değer atamasında belirlenir.

Tablo 1:

Değişken Tipi Boyut
sbyte 8-bit (1-byte)
short 16-bit (2-byte)
int 32-bit (4-byte)
long 64-bit (8-byte)
byte 8-bit (1-byte)
ushort 16-bit (2-byte)
uint 32-bit (4-byte)
ulong 64-bit (8-byte)
decimal 128-bit (16-byte)
float 32-bit (4-byte)
double 64-bit (8-byte)
object sınırsız
bool 8-bit (1-byte)
char 16-bit (2-byte)
string sınırsız

Tablo 2:


static void Main(string[] args)

{

//Tek satır yorum

/* Çoklu satır yorum */

int sayi1;

sayi1 = 1;

int sayi2 = 10;

Console.WriteLine(sayi1);

Console.WriteLine(sayi2);

double sayi3 = 10.5;

double sayi4 = sayi3;

Console.WriteLine(sayi3);

Console.WriteLine(sayi4);

bool b = true;

Console.WriteLine(b);

string isim1;

isim1 = "Merhaba, ";

string isim2 = "PC Magazine";

Console.WriteLine(isim1);

Console.WriteLine(isim2);

isim2 = "yigit";

Console.WriteLine("yeni isim: " + isim2);

}

Tablo 3:


static void Main(string[] args)

{

int a = 5;

int b = 10;

int c = ((a * 2 - 2) - 1) + ((b * 3) % 5) / 3 ;

Console.WriteLine(c);

string s1 = "PC Magazine.";

string s2 = "Merhaba, ";

string s3 = s2 + s1;

Console.WriteLine(s3);

Console.WriteLine("Yigit\n\n\nKiran");

}

Tablo 4:


static void Main(string[] args)

{

var metin = "Merhaba, PC Magazine";

var sayi = 4;

var ondalikSayi = 4.5;

var boolean = true;

Console.WriteLine(metin);

Console.WriteLine(sayi);

Console.WriteLine(ondalikSayi);

Console.WriteLine(boolean);

}

p.s. Bu yazı Ağustos 2008 PC Magazine dergisindeki makalemden derlenmiştir.

Related posts:

  1. C# Dersleri – 1: .Net Framework
  2. Ajax Extender nesnelerinin kullanimi
  3. Web Sayfaniza Virtual Earth Haritalari Ekleyin
  4. ASP.NET Ajax Kullanarak Facebook Uygulamasi Gelistirmek
  5. ASP.NET Ajax kullanarak iletisim formu hazirlamak