C# Veri Türleri ve Değişkenler

1.Değişken Nedir?

Değişken kavramı sadece programlama dillerinde kullanılan bir kavram değildir. Matematik ve istatistik gibi disiplinlerde de kullanılan bir tanımdır.

Programlama dillerinde kullanılan değişken kavramı, kullanıcı tarafından girilmiş veya programın çalışması sırasında oluşmuş verilerin geçici bellek alanında tutulması(RAM) ve ihtiyaç duyulduğunda ilgili alanlardan rahatlıkla istenilen verilerin getirilebilmesini sağlayan yapılardır. Bu sayede programın çalışması sırasında çeşitli sebepler ile oluşmuş geçici veriler, geçici bellek alanında(RAM) rahatlıkla saklanabilir. İstenildiğinde içerdikleri veriler alınabilir veya değiştirilebilir.

Herhangi bir sebepten dolayı kalıcı olarak saklanması gerekmiyor ise, program yürütmesini tamamladığında, değişken ve değişkenin içerdiği verilerde bellek alanından silinir.

Programcı çoğunlukla değişkenin belleğin hangi alanında olduğu ve bu alana nasıl erişebileceği ile ilgili bir çabası olmaz. Programcının yaptığı tek şey değişkene veridiği isimle istenilen işlemleri gerçekleştirmektir (Okuma veya Yazma).

Bir değişken tanımı yapıldığında, ilgili değişkenin veri türüne(tipine) bağlı olarak bilgisayarın belleğinden belli bir yer ayırılır ve bellekteki bu bölüme değişkenin ismi ile ulaşılır.

Örneğin, kullanıcı adı verisini “KullaniciAdi” isimli bir değişkende tutabilir ve programın çalışması sırasında ihtiyaç duyulması durumunda “KullaniciAdi” ismi ile istenilen veriye erişilebilir.

Değişken kavramı ile ilk defa tanışmış biri şu soruyu sorabilir.
Niçin verileri değişkenlerde tutmalıyız?
İhtiyaç duyulan veriler direk işlemlerde kullanılamaz mı?

Cevap olarak şunu söyleyebiliriz. Bir hesap makinesi uygulaması geliştirdiğinizi düşünün. Programcı olarak, kullanıcının hangi sayılar ile işlem yapmak isteyeceğini nereden bileceksiniz. Kullanıcı herhangi bir anda herhangi bir nedenden dolayı farklı sayılar ile farklı matematiksel işlemler gerçekleştirmek isteyecektir.

Burada programcıya düşen, kullanıcıdan hangi sayısal büyüklükler ile çalışmak istiyor ise onları bilgisayarın belleğinde geçici bir yerde saklamak ve bu büyüklükleri kullanıcının talep ettiği işlem için(toplama, çarpma vb.) bellek alanından bellek alanının ismi ile (Değişken) çağırıp işlemi gerçekleştirmek olmalıdır.

Örnek olarak kullanıcının programımızı kullanarak iki sayıyı çarpmak istediğini düşünelim. Birinci sayı için değişken ismi olarak “Sayi1”, ikinci sayı için “Sayi2”, işlemin sonucunu tutmak için ise “Sonuc” isimlerinin oluşturulduğunu varsayalım. Bu senaryoda programcı olarak şu kod satırını yazarak kullanıcının çarpma isteğini gerçekleştirebiliriz.

Sonuc = Sayi1 * Sayi2

Yukarıda görülen satırda “Sayi1” ve “Sayi2” matematiksel çarpma işlemine tabi tutulmuş ve oluşan sonuç “Sonuc” isimli değişkene yazılmıştır.

Gördüğünüz gibi sayılar ile değil, bu sayıların tutulduğu değişken isimleri ile işlemlerimizi gerçekleştirmekteyiz.

2.C# da Veri Türleri (Veri Tipleri)

C# da bir değişken tanımı yaparken bu değişkene ait veri türünü de belirtmemiz gerekir. İlgili tanımlama ile değişkenin içerisinde barındırdığı verinin türü ile ilgili bir sınırlama getirmiş oluruz.
İnsan yaşına ait veri tutan bir değişken yaklaşık olarak 0 – 150 aralığında verileri olacaktır. T.C. kimlik numarası verisini tutan bir değişkenin ise sabit 11 karakter uzunluğuna sahip olması gerekir. Cinsiyet verisini tutan bir değişkenin ise Kadın ve Erken olarak veri tuttuğunu düşünecek olur isek maksimum beş karakterlik bir veriden oluşacağını söyleyebiliriz.
Örneklerde de görüldüğü gibi, her değişkenin oluşturulma amacı farklıdır. Ve barındırdığı verinin türü ile büyüklüğü de aynı değildir.
C# daki veri türlerinde biriyle değişken tanımlandığında, bellekten veri türüne bağlı olarak belli bir yer ayrılır.
Örneğin, sbyte veri türünden değişken tanımı yapıldığında bellekten 8 bitlik (1 Byte) bir alan ayrılırken, decimal türünden bir değişken tanımlandığında bellekten 128 bitlik (16 Byte) bir alan ayrılacaktır.
Bu noktada belleğin verimli kullanımı için doğru veri türü tercihi yapmanın önemi anlaşılmalıdır.
sbyte veri türünden tanımlayabileceğiniz bir değişken için decimal veri türünü tercih etmeniz durumunda 120 bitlik kullanılmayacak bellek alanını işgal etmiş olursunuz.

c_sharp_degiskenler

C# da veri türlerini(tipleri) üç grupta inceleyebiliriz. Bunlar,
1. Değer Türleri
2. Başvuru(Reference) Türleri
3. İşaretçi Türleri
olmak üzere üç grupta incelenebilir. Şimdi sırasıyla bunları inceleyelim.

2.1.Değer Türleri

Değer türleri de kendi altında aşağıdaki gibi gruplara ayrılır. Şimdi sırayla bu türleri inceleyelim.
c_sharp_deger_turleri

2.1.1.Yapılar
2.1.1.1.Sayısal Türler
2.1.1.1.1.Tamsayı Türleri

Aşağıdaki tabloda C# programında kullanılabilecek tamsayı türleri gösterilmektedir. Dikkat edecek olursanız, her veri türünün farklı boyutlarda sayılar aldığını görebilirisiniz.

Şimdi ise yukarıda bahsi geçen tamsayı türleri ile ilgili bazı basit uygulamalar gerçekleştirelim.

 

Problem-1: Kullanıcı tarafından girilen iki sınav notu değerlerinin ortalamasının alınması

Çözüm-1: Kullanıcının gireceği değerler sınav notları olacağı için en az sıfır, en fazla ise 100 olabilir. Acaba hangi veri türünü seçersek en az bellek alanı işgali gerçekleştiririz.

Tablomuzda en az 8 bitten oluşan iki veri türü bulunmakta. Biri sbyte, diğeri ise byte. sbyte seçersek -128 ile +127 sayıları arasında değerler girebiliriz. byte veri türünü seçersek 0 ile 255 sayıları arasında değerler girebilir.

İki veri türüde ihtiyacımızı karşılıyor.

Örneğimizde byte veri türünü seçerek çözüm gerçekleştirelim.

“Conver.ToByte” ifadesi biraz karışık gelmiş olabilir. C# da ……. dan dolayı hata mesajı oluşur. Bu sorunu giderebilmek için bu dönüşümü gerçekleştiriyoruz. Tabi tek çözüm yöntemi bu değil.

Soru: Yukarıdaki örneğimizde not değerleri olarak 25 ile 70 değerleri girildiğinde program hangi sonucu üretiyor?

Cevap: 47.

Soru: Niçin 47. Sonucun 47,5 olması gerekmiyor mu?

Cevap: Değişkenlerimizin türü tamsayı olduğu için ondalıklı kısımlar yuvarlanıyor. Sonuç 47,33 olsaydı, program 47 sonucunu üretecekti. 47,5 ve üstü için ise 48 sonucunu üretecekti.

 

Problem-2: Kullanıcı, program tarafından kendisine sorulan not değeri alanına byte veri tipinden büyük bir değer girmiş olsaydı ne olurdu? Eğer varsa bir sorun nasıl çözülebilir?

Çözüm-2: Overflow Exception was unhandled” hatası oluşur. Programcının yapması gereken kullanıcı tarafından girilebilecek istenmeyen veri girişlerini kontrol edecek ve gerektiğinde kullanıcıyı uyaracak bir mekanizma kurması gerekir. Konuyu yeni öğrendiğinizi varsayarak, çözümü ileride belirteceğiz.

 

2.1.1.1.2.Kayan Nokta Türleri

 

Problem-3: Bir mağazada yapılmış üç ürüne ait satışların toplamına ihtiyacımız var. Ondalıklı fiyat değerlerine sahip olan bu ürünler için hangi veri tipini kullanmalıyız.

Çözüm-3: İki farklı kayan noktalı veri tipinden float ihtiyacımızı karşılayabilir.

2.1.1.1.3. Decimal Türü
2.1.1.2. Bool Türü

.

2.2.Başvuru Türleri
2.3.İşaretçi Türleri

 

3.C# da Veri Türlerine Ait Varsayılan Değerler

Osman SELVİ

Bir cevap yazın