C# programlama eğitim serimizde çok heyecan verici bir noktaya geldik! Önceki yazılarımızda değişkenleri, veri tiplerini ve operatörleri öğrenerek programlarımızın temellerini atmıştık. Ancak şu ana kadar yazdığımız kodlar her zaman yukarıdan aşağıya doğru tek bir düz çizgide ve aynı şekilde çalışıyordu. Gerçek dünyada ise uygulamaların “kararlar” vermesi gerekir.
Örneğin; bir e-ticaret sitesi, sepet tutarı 500 TL’nin üzerindeyse kargoyu bedava yapmalı, kullanıcının girdiği şifre yanlışsa ekrana hata mesajı vermeli veya bir oyunda karakterin canı sıfıra inerse “Oyun Bitti” ekranı çıkmalıdır.
İşte programlarımıza “düşünme” ve “karar verme” yeteneği kazandıran bu yapılara Koşullu İfadeler (Conditional Statements) diyoruz. C, C++, Java ve JavaScript gibi C ailesinden gelen dillerle benzer bir sözdizimine (syntax) sahip olan C# dilinde; kodun akışını yönlendirmek için if, else ve switch gibi kontrol ifadelerini kullanırız.
Bu kapsamlı rehberde, C# koşullu ifadelerini günlük hayattan bol örneklerle, en temelden modern C# özelliklerine kadar adım adım öğreneceğiz.
1. if İfadesi (Eğer Koşulu)
İngilizce bir kelime olan “If”, Türkçe’de “Eğer” anlamına gelir. Programlamadaki mantığı da tam olarak budur: “Eğer bu koşul doğruysa, parantez içindeki kodları çalıştır.”
C# dilinde if ifadeleri ve döngüler, yalnızca sonucu kesin olarak true (doğru) veya false (yanlış) olan mantıksal (bool) ifadelerle çalışır. Eski dillerde (örneğin C veya C++) sayıların 0 veya 1 olması doğru/yanlış kabul edilebilirken, C# dili geliştiricilerin hata yapmasını önlemek için çok daha katı bir yapı sunar ve tam olarak bir bool veri tipi bekler.
Temel Yazım Kuralı:
if (koşul)
{
// Koşul DOĞRU (true) ise buradaki kodlar çalışır
}
Örnek Uygulama: Bir sinema bileti sisteminde kullanıcının yaşının +18 filmler için uygun olup olmadığını kontrol edelim.
int kullaniciYasi = 20;
// Eğer kullaniciYasi 18'den büyük veya eşitse (true ise) blok içi çalışır.
if (kullaniciYasi >= 18)
{
Console.WriteLine("Biletiniz onaylandı. İyi seyirler dileriz!");
}
// Eğer yaş 18'den küçük olsaydı, program bu bloğu tamamen görmezden gelip atlayacaktı.
2. else İfadesi (Değilse Durumu)
if bloğu, koşul doğru olduğunda ne yapılacağını söyler. Peki koşul yanlışsa ne olacak? İşte bu noktada devreye else (değilse) bloğu girer. C# dilinde else tek başına kullanılamaz, her zaman bir if bloğuna bağlı olmak zorundadır.
Örnek Uygulama:
int butce = 50;
int urunFiyati = 120;
if (butce >= urunFiyati)
{
Console.WriteLine("Ödeme başarılı, ürün kargoya veriliyor.");
}
else
{
// Üstteki koşul false (yanlış) ürettiği için burası çalışır.
Console.WriteLine("Bakiye yetersiz! Lütfen kartınıza para yükleyin.");
}
Yukarıdaki kodda, kullanıcının bütçesi (50), ürün fiyatından (120) büyük olmadığı için bilgisayar doğrudan else bloğuna atlar ve ekrana bakiye yetersiz uyarısı verir.
3. else if İfadesi (Çoklu Koşullar)
Bazen hayatta sadece siyah ve beyaz yoktur; gri tonları da vardır. Eğer programımızda ikiden fazla ihtimali kontrol etmemiz gerekiyorsa, ardı ardına else if (değilse eğer) blokları ekleyebiliriz.
Örnek Uygulama: Öğrencinin aldığı sınav puanına göre harf notu hesaplayan bir program yazalım.
int sinavNotu = 75;
if (sinavNotu >= 90)
{
Console.WriteLine("Harf Notunuz: AA");
}
else if (sinavNotu >= 80)
{
Console.WriteLine("Harf Notunuz: BA");
}
else if (sinavNotu >= 70)
{
// 75 sayısı bu şarta uyduğu için ekrana BB yazdırılacak.
Console.WriteLine("Harf Notunuz: BB");
}
else if (sinavNotu >= 50)
{
Console.WriteLine("Harf Notunuz: CC");
}
else
{
// Yukarıdaki HİÇBİR şarta uyulmadığında en son burası çalışır.
Console.WriteLine("Kaldınız: FF");
}
Çalışma Mantığı: Bilgisayar bu blokları yukarıdan aşağıya doğru tek tek okur. Doğru olan ilk koşulu bulduğunda o bloğun içine girer, kodu çalıştırır ve alt kısımdaki diğer kontrollerin hiçbirine bakmadan sistemi sonlandırıp yoluna devam eder.
4. switch-case Yapısı (Alternatif Çoklu Karar Mekanizması)
switch ifadeleri, özellikle bir değişkenin birçok farklı ayrık (kesin) değere eşit olup olmadığını kontrol ederken, kalabalık if-else if bloklarına kıyasla çok daha temiz ve okunabilir bir sözdizimi sunar.
Bir menüden seçim yapıldığında, haftanın günlerini ekrana yazdırırken veya belirli kullanıcı rollerini kontrol ederken switch yapısı hayat kurtarır.
Temel Kavramlar:
- switch: Kontrol edilecek ana değişkeni parantez içine alır.
- case: Değişkenin olabileceği olası durumları temsil eder.
- break: O durum (case) bittikten sonra sistemin switch bloğundan çıkmasını sağlar.
- default: Eğer değişken hiçbir
casedurumuna uymuyorsa çalışacak olan varsayılan (tıpkı else gibi) kısımdır.
Örnek Uygulama: Kullanıcının sistemdeki rolüne göre yetkilerini belirleyen bir konsol uygulaması yapalım:
string kullaniciRolu = "Müşteri";
switch (kullaniciRolu)
{
case "Admin":
Console.WriteLine("Tüm panellere tam erişim sağlandı.");
break; // İşlem bitti, switch'ten çık!
case "Editör":
Console.WriteLine("Sadece içerik ekleme ve düzenleme yetkisi verildi.");
break;
case "Müşteri":
// Bizim değişkenimiz "Müşteri" olduğu için program doğrudan bu bloğu çalıştıracaktır.
Console.WriteLine("Alışveriş sepetinize yönlendiriliyorsunuz.");
break;
default:
// Bilinmeyen farklı bir metin girilirse bu kısım devreye girer.
Console.WriteLine("Geçersiz kullanıcı rolü tespit edildi!");
break;
}
5. Gelişmiş Özellikler: Ternary Operatörü ve Switch İfadeleri
Eğer sadece basit bir if-else yazacaksanız ve bu kod sadece tek bir satırdan ibaretse, C# size Ternary Operatörü (?:) adında çok pratik bir kısayol sunar.
[Koşul] ? [Doğruysa Burası] : [Yanlışsa Burası];
int havaSicakligi = 30;
// Uzun if-else yerine tek satırda karar verme:
string tavsiye = (havaSicakligi > 25) ? "Tişört giy" : "Mont al";
Console.WriteLine(tavsiye); // Ekrana "Tişört giy" yazdırır.
Modern C# ile Desen Eşleştirme (Pattern Matching): C# dilinin modern sürümleriyle (C# 8.0 ve sonrası) birlikte dil yapısı inanılmaz derecede gelişmiştir. Artık switch ifadelerini, gelişmiş desen eşleştirme (pattern matching) özellikleri ile kullanabiliriz. Bu sayede verinin sadece değerine değil, özelliklerine ve mantıksal yapısına göre de çok daha kısa kontroller yapabiliriz.
Örneğin; and, or ve > , < gibi ilişkisel mantıkları doğrudan switch içerisinde oldukça zarif bir “Switch Expression” şeklinde yazabiliriz:
int hiz = 120;
// Yeni nesil Switch Expression (C# 8.0+)
string trafikDurumu = hiz switch
{
< 50 => "Çok yavaşsınız, hızlanın.",
>= 50 and <= 82 => "Hızınız yasal sınırlar içinde.",
> 82 => "Hız sınırını aştınız, ceza yazılıyor!",
_ => "Bilinmeyen durum" // '_' işareti default anlamına gelir.
};
Console.WriteLine(trafikDurumu);
Sonuç Olarak
Bu rehberimizde, C# programlamanın bel kemiği olan Koşullu İfadeler (If-Else ve Switch-Case) konusunu başarıyla öğrendiniz. Artık yazdığınız kodlar sadece düz bir metin olmaktan çıkıp, kullanıcının girdilerine, hesaplamaların sonuçlarına ve sistemin durumuna göre akıllıca “kararlar” verebilen dinamik yazılımlara dönüştü.
C# kodlarınızı yapılandırırken, karmaşık çoklu durumlarda kodu temiz tutmak için switch kullanmayı, basit mantıksal kontrollerde ise if-else bloklarına başvurmayı unutmayın. Bir sonraki eğitim içeriğimizde, bilgisayarların en iyi yaptığı iş olan “tekrarlı işlemleri” yönetmemizi sağlayan Döngüler (For, While) konusuna geçiş yapacağız.
Bol pratikli ve hatasız kodlamalar!




