Selam dostlar! Nasılsınız, iyi misiniz? Ben Bursa’dan sesleniyorum, malum havalar Bursa’da da epey bi değişti, yağmur çiseliyor ara sıra. Neyse efendim, bugün ne konuşacağız? Programlamanın olmazsa olmazı, her şeyin temel taşı olan değişkenler ve veri tiplerini. Hani bazen oturup düşünürsün ya, “Bu bilgisayar benim ne dediğimi nasıl anlıyor?” diye. İşte o sihirli kelimelerin başında geliyor bu değişkenler.
Benim ilk programlama deneyimlerimden biri, sanırım üniversitenin ilk yıllarıydı. Bir C# dersi almıştık ve hocamız bize şöyle bir şey anlatmıştı: “Değişkenler, bilgisayarın hafızasında yer tutan kutular gibidir. İçine bir şey koyarsın, sonra onu çağırırsın, üstüne bir şey eklersin, hatta bazen içindekini tamamen değiştirirsin.” O zamanlar bana çok soyut gelmişti bu kutu olayı. Ama zamanla, özellikle kendi küçük programlarımı yazmaya başladığımda, ne kadar işe yaradığını anladım. Mesela bir oyun yaparken oyuncunun canını, puanını, ismini tutmak için bir kutuya ihtiyacım var, değil mi? İşte o kutu bizim değişkenimiz oluyor.
Şimdi bu değişkenlerin bir de çeşitleri var. Yani her kutuya her şeyi atamıyorsun. Mesela bir sayıyı alıp, onu bir kelimenin içine koymaya çalışırsan, bilgisayar kafayı yiyebilir. Tıpkı benim gibi, bazen sabahları uyanınca beynim hemen çalışmıyor, hani şey gibi… neyse anladın sen 🙂
int, string, bool ve var: Sihirli Dörtlü
Bu işin en temel veri tipleri var. Birincisi int. Bu tam sayılar için kullanılan bir tip. Yani 1, 5, -100 gibi değerleri saklamak için birebir. Mesela yaşın, bir sayıdır, değil mi? O zaman yaşını tutmak için int yas = 25; gibi bir şey yazarsın.
Sonra string var. Bu da metinler için. İsimler, adresler, mesajlar… Hepsini tırnak içinde yazarsın. Hani benim blog yazımdaki gibi, “Merhaba dünya!” gibi bir şeyi saklamak için string mesaj = \"Merhaba dünya!\"; dersin. Bu arada bazen kendi blog yazılarımı okuyunca, “Vay be ne yazmışım!” diyorum, sonra da “Acaba bunu hala yapabiliyor muyum?” diye kendime soruyorum. 🙂
Bir de bool var. Bu sadece iki değer alabilen bir tip: true (doğru) veya false (yanlış). Mesela bir kullanıcının giriş yapıp yapmadığını kontrol ederken kullanabilirsin. bool girisYapildi = true; gibi. Bu basit gibi görünse de, programın akışını kontrol etmek için inanılmaz önemli.
Ve gelelim sihirli değnek var‘a! Bu, C#’ta çok sevilen bir özellik. Sen değişkenin tipini açıkça yazmak yerine var deyince, bilgisayar senin atadığın değere göre tipini kendisi anlıyor. Yani var sayi = 10; dediğinde bilgisayar bunun bir int olduğunu anlıyor. Ya da var isim = \"Ali\"; dediğinde bunun bir string olduğunu anlıyor. Bu, kodu daha kısa ve okunabilir hale getirebiliyor, tabi abartmamak kaydıyla.
Şimdi durup düşününce, ben bu veri tiplerini ilk öğrendiğimde, hep bir yerlerde karşıma çıkan o C# örneği vardı ya, Console.WriteLine(). Onu kullanırken hep String’ler yazıyordum ama bazen sayıları da direkt yazabiliyordum. Hani sanki bilgisayar kendi anlıyordu ne istediğimi. İşte o zamanlar bu var olayı biraz daha yaygınlaşmaya başlamıştı sanırım. Ama ilk başta hep int, string diye tanımlardım, alışkanlık işte. Neyse, şimdi kod örneğine geçelim de daha iyi anlaşılsın.
Bu arada, geçen gün bir arkadaşım sordu, “Abi bu var kullanmak iyi mi, yoksa hep açık açık yazmak mı lazım?” diye. Açıkçası, benim gibi tecrübeli yazılımcılar bile bazen var kullanıyor. Ama ilk öğrenenler için, hangi tip ne işe yarıyor, onu anlamak için açıkça yazmak daha iyi olabilir. Tabi bu tamamen kişisel tercih meselesi.
Bir de şöyle bir durum var, hani bazen bir program yazıyorsun, sonra onu bir başkası alıp devam ettiriyor ya. İşte o zaman var kullanmak biraz kafa karıştırıcı olabilir. Karşıdaki kişi senin atadığın değerin ne olduğunu hemen anlayamayabilir, bu da kodun okunabilirliğini azaltır sanırım.
Kod Örneği: Yanlış ve Doğru Kullanım
Şimdi gelelim işin en can alıcı noktasına. Kod örneği olmadan bu işler olmaz, değil mi? Hani derler ya, “Bir resim bin kelimeye bedeldir.” Kod da öyle. Bakalım yanlış ve doğru kullanımı nasılmış:
// YANLIŞ KULLANIM: Tip belirsizliği ve okunabilirlik sorunu var kullaniciAdi = Console.ReadLine(); // Kullanıcıdan bir şey alıyoruz ama ne olduğu belli değil var dogumTarihi = Console.ReadLine(); // Yine ne olduğu belirsiz bir giriş// Doğru Kullanım: Tipleri açıkça belirtmek, neyin ne olduğunu netleştirmek string kullaniciAdiDogru = Console.ReadLine(); // Kullanıcı adını string olarak alacağımız belli int dogumYiliDogru; // Burada bir hata olmaması için TryParse kullanmak iyi olurdu ama şimdilik basit tutalım dogumYiliDogru = int.Parse(Console.ReadLine());
Console.WriteLine("Kullanıcı Adı: " + kullaniciAdiDogru); Console.WriteLine("Doğum Yılı: " + dogumYiliDogru);
// Bir de bool örneği ekleyelim bool uyeMi = true; // Bu kullanıcı üye olsun if (uyeMi) { Console.WriteLine("Hoş geldiniz!"); }
Bakın şimdi, ilk örnekte var kullanınca, kullaniciAdi ve dogumTarihi değişkenlerinin ne türde veri tuttuğunu ilk bakışta anlamak biraz daha zor. Console.ReadLine() her zaman string döner ama biz dogumTarihi‘ni daha sonra sayı olarak kullanmak isteyebiliriz. İşte orada hata yaparız. İkinci kısımda ise, tipleri açıkça string ve int olarak belirttiğimiz için neyin ne olduğu çok daha net. Bu da kodun okunabilirliğini artırır, hata yapma olasılığını azaltır. Tabi int.Parse yerine int.TryParse kullanmak daha güvenli olurdu, çünkü kullanıcı sayı yerine harf girerse program çöker. Ama işte, basit tutmak adına şimdilik böyle bıraktım. 🙂
Bu arada, geçenlerde bir kod derlemesinde, benim de başıma gelen bir şey vardı. Kendi yazdığım bir programda, bir değeri int olarak beklerken, kullanıcıdan gelen veriyi doğrudan int‘e çevirmeye çalışmıştım. Tabii kullanıcı harf girince, program patladı. O an “Ah be, niye TryParse kullanmadım ki?” dedim kendi kendime. Neyse efendim, bu tür hatalar insanı tecrübelendiriyor işte. Hani derler ya, “Düşe kalka öğrenirsin.”
Neden Veri Tipleri Önemli?
Peki neden bu kadar takılıyoruz bu veri tiplerine? Çünkü bilgisayarın verileri doğru şekilde işlemesi için bu şart. Bir kere bellek kullanımını optimize eder. Yani gereksiz yere hafızayı doldurmazsın. Düşünsene, bir sayıyı tutmak için 4 byte yeterliyken, sen onu bir string olarak saklamaya kalkarsan, belki de 100 byte yer kaplayabilir. Bu da ilerleyen zamanlarda performans sorunlarına yol açabilir.
İkinci olarak, veri bütünlüğünü sağlar. Yani bir sayıyla bir metni birbirine karıştırmazsın. Bu da mantıksal hataları önler. Mesela bir hesaplama yaparken, yanlışlıkla bir metni sayı gibi kullanmaya çalışsan, sonuç ne olur? Muhtemelen saçmalık olur. İşte veri tipleri bu tür saçmalıkları engeller.
Sonuç olarak, değişkenler ve veri tipleri, programlamanın temel yapı taşlarıdır. Onları doğru anlamak, daha temiz, daha verimli ve daha hatasız kod yazmanın anahtarıdır. Bu yüzden üzerine düşmekte fayda var.
Bu arada, veri tipleri hakkında daha fazla bilgi edinmek isterseniz, Microsoft’un kendi dokümantasyonlarına bir göz atabilirsiniz. Genellikle C# ile ilgili her şeyi bulabilirsiniz orada. Mesela şuraya bir Google araması yapıp bakabilirsiniz. Eminim işinize yarayacak şeyler bulursunuz.