crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
C# Karar Yapıları: Geleneksel if-else ve Modern switch (Pattern Matching)
Bir yazılımın zekası, verilere göre farklı yollar izleyebilme yeteneğinde gizlidir. C#'ta bu zekayı if-else ve son yıllarda büyük bir evrim geçiren switch-case yapılarıyla kuruyoruz. Bu rehberde, sadece temelleri değil, modern C# dünyasındaki gelişmiş teknikleri de öğreneceğiz.
1. Geleneksel Karar Yapısı: if-else
En temel karar yapısıdır. Bir koşulun doğru (true) veya yanlış (false) olmasına göre kodun yönünü tayin eder.
C#:
int havaSicakligi = 25;
if (havaSicakligi > 30)
{
Console.WriteLine("Hava çok sıcak, gölge bir yer bulun.");
}
else if (havaSicakligi >= 20 && havaSicakligi <= 30)
{
Console.WriteLine("Hava tam yürüyüş yapmalık.");
}
else
{
Console.WriteLine("Hava biraz serin, yanınıza ceket alın.");
}
- Kullanım İpucu: Koşullarınız birbirine bağlıysa else if kullanın. Eğer her koşulun ayrı ayrı kontrol edilmesini istiyorsanız bağımsız if blokları kullanmalısınız.
2. Ternary Operator: Kısa Yol İfadesi
Basit bir if-else yapısını tek satıra indirmek için kullanılır. Kodun okunabilirliğini artırır.
C#:
int not = 65;
string sonuc = (not >= 50) ? "Geçti" : "Kaldı";
Console.WriteLine(sonuc);
3. Modern Switch-Case ve Pattern Matching
Eskiden switch yapısı sadece belirli değerleri (sayı, metin) kontrol etmek için kullanılırdı. Ancak modern C# ile birlikte Pattern Matching geldi ve switch yapısı bir İsviçre çakısına dönüştü.
Geleneksel Switch Yapısı
C#:
int gun = 3;
switch (gun)
{
case 1: Console.WriteLine("Pazartesi"); break;
case 6:
case 7: Console.WriteLine("Hafta sonu"); break;
default: Console.WriteLine("Hafta içi"); break;
}
Modern Switch Expression (C# 8.0+)
Yeni sözdizimi ile case ve break kelimelerine veda ediyoruz. Bu yapı çok daha temiz ve performanslıdır.
C#:
int gunNo = 5;
string gunAdi = gunNo switch
{
1 => "Pazartesi",
2 => "Salı",
6 or 7 => "Hafta sonu", // Mantıksal operatör kullanımı
_ => "Geçersiz Gün" // default yerine discard (_) kullanılır
};
Gelişmiş Pattern Matching (C# 9.0 ve 10.0+)
Artık switch içinde aralık kontrolü ve tip kontrolü yapabiliyoruz:
C#:
object veri = 150;
string mesaj = veri switch
{
int n when n > 100 => "Büyük bir tam sayı",
int n => "Küçük bir tam sayı",
string s => $"Bu bir metindir: {s}",
null => "Veri bulunamadı",
_ => "Bilinmeyen tür"
};
if mi, switch mi? Hangisini Seçmelisiniz?
Hangi yapıyı kullanacağınız konusunda kararsız kalıyorsanız şu kriterlere göz atabilirsiniz:
| Özellik | if-else | Modern switch |
|---|---|---|
| Karmaşıklık | Mantıksal ve karmaşık operatörler için ideal. | Net değerler ve tip kontrolleri için daha temiz. |
| Okunabilirlik | Çok fazla else-if kod kirliliği yapabilir. | Tablo benzeri yapısıyla çok daha okunaklıdır. |
| Performans | Koşullar sırayla kontrol edilir. | Büyük listelerde "jump table" kullanarak daha hızlı çalışır. |
Sonuç
Eski usul switch-case yapılarını unutmanın vakti geldi. Modern C# ile gelen switch expressions ve pattern matching, kodunuzun hem daha şık görünmesini sağlar hem de hata yapma payınızı azaltır. Ancak unutmayın; her zaman en teknolojik olan değil, takım arkadaşlarınızın da en kolay anlayabileceği yapıyı seçmek en doğrusudur.