Anasayfa / C# / CONSOLE APPS / C# Veri Tipleri (Data Types)

C# Veri Tipleri (Data Types)

C# öğrenme serüvenimizde çok önemli ve temel bir durağa geldik: Veri Tipleri! “C# Değişkenler” isimli önceki rehberimizde, değişkenleri verilerimizi içinde sakladığımız “etiketli kutulara” benzetmiştik. Şimdi ise o kutuların “hangi tür” eşyaları (verileri) saklayabileceğini öğreneceğiz.

Bilgisayarlar metinleri, tam sayıları, ondalıklı sayıları veya “doğru/yanlış” gibi mantıksal ifadeleri hafızada (RAM) birbirinden farklı şekillerde tutarlar. C#, “tip güvenli” (strongly typed) bir dil olduğu için, bir değişken (kutu) oluşturduğunuzda, içine ne tür bir veri koyacağınızı en baştan bilgisayara açıkça belirtmeniz gerekir. Bu kural, programınızın daha güvenli, hatasız ve hızlı çalışmasını sağlar.

Bu kapsamlı rehberde, C# dilinde en çok kullanacağınız veri tiplerini günlük hayattan bol örneklerle inceleyecek ve kodlayarak öğreneceğiz.


1. Değer Tipleri ve Referans Tipleri (Value Types vs. Reference Types)

C# mimarisinde veri tipleri temelde iki büyük kategoriye ayrılır: Değer Tipleri (Value Types) ve Referans Tipleri (Reference Types).

  • Değer Tipleri: Veriyi doğrudan hafızadaki kendi alanında (Stack bölgesi) saklar. Örneğin bir sayı veya bir harf doğrudan bu kutunun içindedir.
  • Referans Tipleri: Verinin kendisini değil, verinin hafızadaki (Heap bölgesi) “adresini” (referansını) tutar.

Başlangıç aşamasında bu konunun derin mimarisine girmemize gerek yok, ancak C# dilini öğrenirken bu iki kavramın varlığını bilmek, ileride karşılaşacağınız gelişmiş konuları (Nesne Yönelimli Programlama gibi) çok daha rahat anlamanızı sağlayacaktır.


2. Tam Sayı Veri Tipleri (Integer Types)

Günlük hayatta sayıları tek bir kavram olarak düşünsek de, programlamada bellek (RAM) optimizasyonu yapmak için sayıların boyutuna göre farklı tipler kullanılır. C# dili; sbyte, byte, short, ushort, int, uint, long ve ulong olmak üzere çeşitli tam sayı tipleri sunar.

Ancak yeni başlayan biri olarak temel olarak şu üçünü bilmeniz uygulamalarınızın %95’i için yeterli olacaktır:

  • int: C# dünyasının en popüler tam sayı tipidir. İngilizce “Integer” kelimesinden gelir. Yaklaşık -2 milyar ile +2 milyar arasındaki tam sayıları tutabilir.
  • long: int tipinin kapasitesinin yetmediği, devasa büyüklükteki sayılar için (örneğin dünya nüfusu, uzaklık ölçümleri vb.) kullanılır.
  • byte: Sadece 0 ile 255 arasındaki küçük pozitif sayıları tutar. Hafızada çok az yer kapladığı için, özellikle donanım programlama veya resim/dosya işleme gibi işlemlerde sıklıkla tercih edilir.

Örnek Kod:

// int kullanımı (Ortalama büyüklükteki sayılar)
int dogumYili = 1995;
int gunlukAdim = 12500;

// long kullanımı (Çok büyük sayılar)
// 'long' değerlerin sonuna genellikle 'L' harfi konulması iyi bir pratiktir.
long dunyaNufusu = 8000000000L;

// byte kullanımı (Sadece 0 - 255 arası)
byte insanYasi = 45;

Console.WriteLine($"Kullanıcının yaşı: {insanYasi}, Doğum yılı: {dogumYili}");


3. Ondalıklı Sayı Veri Tipleri (Floating-Point Types)

Küsüratlı işlemler (bölme işlemleri, bilimsel hesaplar, fiyatlandırmalar) için ondalıklı sayılara ihtiyaç duyarız. C# dilinde bu iş için float, double ve decimal tipleri mevcuttur.

  • double: C# dilinde ondalıklı sayıların varsayılan tipidir. Çok büyük veya çok küçük küsüratlı sayıları tutabilir. Bilimsel ve matematiksel hesaplamalar için idealdir.
  • float: double tipine göre bellekte daha az yer kaplar ancak virgülden sonraki hassasiyeti daha düşüktür. Oyun programlamada (Unity gibi) sıkça kullanılır.
  • decimal: Kesinlikle finansal hesaplamalar ve e-ticaret uygulamaları için tasarlanmıştır. Parasal değerlerde en ufak bir yuvarlama hatası bile istenmediği için, yüksek hassasiyet sunan decimal tipi kullanılır.

Örnek Kod:

// double kullanımı (Varsayılan ondalıklı tip)
double piSayisi = 3.1415926535;

// float kullanımı (Değerin sonuna mutlaka 'f' veya 'F' harfi konulmalıdır)
float sicaklikDegeri = 36.5f;

// decimal kullanımı (Değerin sonuna mutlaka 'm' veya 'M' harfi konulmalıdır)
decimal urunFiyati = 299.99m;

Console.WriteLine($"Ürün Fiyatı: {urunFiyati} TL - Sıcaklık: {sicaklikDegeri} Derece");


4. Metinsel Veri Tipleri (Text Types)

Uygulamalarımızda kullanıcıya göstereceğimiz mesajlar, isimler, şifreler gibi veriler metinsel tiplerde tutulur. C# metinleri yönetmek için char ve string tiplerini sunar.

  • char: Sadece tek bir karakteri tutar (Örn: ‘A’, ‘?’, ‘7’). Değeri her zaman tek tırnak (‘ ‘) işaretleri arasına yazılır.
  • string: Birden çok karakterin (kelimelerin, cümlelerin, paragrafların) bir araya gelmesiyle oluşur. Değeri her zaman çift tırnak (” “) arasına yazılmalıdır.

Örnek Kod:

// Sadece tek karakter
char kanGrubu = 'A';
char ehliyetSinifi = 'B';

// Uzun metinler ve kelimeler
string kullaniciIsmi = "Ahmet Yılmaz";
string karsilamaMesaji = "Web sitemize hoş geldiniz!";

Console.WriteLine($"{karsilamaMesaji} Sn. {kullaniciIsmi}. Ehliyetiniz: {ehliyetSinifi}");


5. Mantıksal Veri Tipi (Boolean)

Programlar çoğu zaman kararlar vererek ilerler. “Kullanıcı giriş yaptı mı?”, “Sipariş kargoya verildi mi?”, “Gece modu açık mı?” gibi soruların sadece iki cevabı vardır: Evet veya Hayır.

  • bool: Sadece true (doğru/evet) veya false (yanlış/hayır) değerlerini alabilen veri tipidir.

Örnek Kod:

bool girisBasarili = true;
bool kampanyaKoduGecerliMi = false;

Console.WriteLine($"Kullanıcı Girişi: {girisBasarili}");


6. Gelişmiş Tipler ve Tip Dönüşümleri (Parsing)

Yukarıdaki temel tiplere ek olarak C#, karmaşık ve modern ihtiyaçları karşılamak için birçok hazır tip barındırır. Tarih/zaman işlemleri için DateTime veya DateTimeOffset, benzersiz ve rastgele kimlik kodları (ID) oluşturmak için Guid, devasa sayılar için BigInteger veya karmaşık sayılar için Complex ve Int128 gibi veri tiplerini .NET kütüphanesi sayesinde doğrudan kullanabilirsiniz.

Peki bu tipler arasında dönüşüm (Parsing) nasıl yapılır? Bir web sitesinde kullanıcıdan yaşını girmesini istediğinizde, kullanıcı “25” yazsa bile sistem bunu önce bir metin (string) olarak algılar. Bu metni matematiksel işlem yapabileceğiniz int (tam sayı) tipine dönüştürmeniz gerekir.

C# dilinde bu işlem için en güvenli yol TryParse komutudur. TryParse metodu, dönüşüm sırasında bir hata olursa programı çökertmek yerine işlemin başarısız olduğunu belirten mantıksal bir sonuç (false) döndürür.

Örnek Kod:

string kullanicidanGelenYas = "25";
int yasDegeri;

// TryParse, "kullanicidanGelenYas" metnini int'e çevirmeyi dener.
// Başarılı olursa sonucu "yasDegeri" isimli değişkene atar.
bool cevirmeBasarili = int.TryParse(kullanicidanGelenYas, out yasDegeri);

if (cevirmeBasarili)
{
    Console.WriteLine($"Kullanıcının yaşı bir sonraki yıl: {yasDegeri + 1} olacaktır.");
}

Modern C# ve “Top-Level Statements” Pratikliği

Eğer C# öğrenmeye yeni başladıysanız, yukarıdaki tüm kod örneklerini Visual Studio veya VS Code üzerinde oluşturduğunuz bir Konsol Uygulamasında doğrudan yazıp çalıştırabilirsiniz. C# 9 ve sonrası sürümlerle gelen “Top-level statements” (Üst düzey ifadeler) özelliği sayesinde, kodlarınızı kafa karıştırıcı sınıflar (class) ve Main metotları içine sarmak zorunda değilsiniz. Tıpkı bir senaryo yazar gibi kodlarınızı en tepeye doğrudan yazabilir ve hızlıca test edebilirsiniz.

Sonuç

Bu rehberimizde C# dilinin temel yapıtaşları olan veri tiplerini örneklerle öğrendik. Tam sayılar için int, ondalıklı işlemler için double ve decimal, metinler için string, tek karakterler için char ve mantıksal sorgular için bool tipini kullanmayı kavradınız. Değişkenlerinizi ve bu değişkenlerin tiplerini doğru seçmek, kaliteli, performanslı ve hatasız bir yazılım geliştirmenin en temel kuralıdır. Bir sonraki aşamada bu verileri yönlendireceğimiz “Koşul Yapıları (If-Else)” konularını öğreneceğiz.


Etiketlendi:

Cevap bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir