Karar Yapıları: if-else ve Modern switch-case (Pattern Matching)

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:

Özellikif-elseModern switch
KarmaşıklıkMantı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.
PerformansKoş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.
 
Geri
Üst