İçeriğe geç

Kontrol Yapıları: if-else ve switch-case ile Kodlara Hayat Verin!

Şimdi diyeceksiniz ki ‘Hocam yine mi kodlama?’ Evet, yine kodlama! Ama bu sefer öyle ahım şahım bir şey değil, daha çok temelleri sağlamlaştırmaya yönelik. Hani böyle yeni bir oyuna başladığınızda önce karakteri nasıl hareket ettireceğinizi öğrenirsiniz ya, işte bu da kodlamanın o ilk hareket komutları gibi bir şey. Bana sorarsanız, hele ki benim gibi böyle eski kafalı bir blog yazarıysanız, ilk başta biraz göz korkutucu gelebilir ama emin olun, mantığını çözdüğünüzde ‘Vay be!’ diyeceksiniz. Hatta geçenlerde bir arkadaşımın yaptığı basit bir hesap makinesi programı vardı, hani böyle toplama, çıkarma falan yapıyor. Ama işte bir yerde takılmış, sürekli hata veriyormuş. Dedim ‘Hallederiz abi, bir bakayım.’ Meğer basit bir ‘if-else’ yapısını yanlış kurmuş, sayıları karşılaştıracağına metinleri karşılaştırıyormuş. Komik ama gerçek, inanın ki böyle şeyler yaşanabiliyor.

Neyse efendim, konumuza dönelim. Bu ‘kontrol yapıları’ dediklerimiz ne peşinde? Basitçe, programımızın belirli koşullara göre farklı yollar izlemesini sağlıyor. Hani siz trafikte kırmızı ışıkta durup yeşil yanınca gidersiniz ya, işte program da böyle davranıyor. Ya şu doğruysa şunu yap, değilse bunu yap diyor kendi kendine.

Öncelikle ‘if-else’ yapısıyla başlayalım. Bu, programlama dünyasının en temel taşlarından biri diyebiliriz. Hani böyle bir karar vermeniz gerekiyor, iki seçeneğiniz var. Eğer A olursa şunu yaparsın, ama A olmazsa o zaman B’yi yaparsın. İşte bu kadar basit. Diyelim ki bir oyun yaptınız, oyuncunun canı 0’ın altına düşerse ‘Oyun Bitti’ mesajı verecek, düşmezse oyun devam edecek. İşte burada ‘if’ devreye giriyor.

Şöyle bir örnek düşünelim: Bir öğrencinin notunu alacağız ve geçti mi kaldı mı onu kontrol edeceğiz. Eğer öğrencinin notu 50’den büyük veya eşitse ‘Geçti!’ diyecek, değilse ‘Kaldı!’ diyecek. Tabi bu sadece basit bir senaryo. Gerçek hayatta daha karmaşık durumlar olabilir. Mesela hem notu kontrol edersin, hem de devamsızlığını. Eğer hem notu 50’den büyükse hem de devamsızlığı belirli bir sayının altındaysa ‘Başarılı!’ diyecek. Yoksa ‘Başarısız!’ diyecek. İşte burada ‘if-else if-else’ yapısı devreye giriyor. Farklı koşulları sırayla kontrol edersin. İlk koşul doğruysa onun içini yapar, değilse diğerine geçer. Sanırım bu mantık size de tanıdık geliyordur.

Şimdi, bu işin bir de ‘switch-case’ dediğimiz farklı bir yüzü var. Bu daha çok, birden fazla seçeneğin olduğu durumlarda işimizi kolaylaştırıyor. Diyelim ki bir menü hazırladınız, kullanıcı 1’e basarsa A işlemini, 2’ye basarsa B işlemini, 3’e basarsa C işlemini yapsın. Bunu ‘if-else if-else’ ile de yapabilirsin tabi ama switch-case daha okunaklı ve bazen daha performanslı olabiliyor. Hani böyle bir sürü ‘else if’ yerine tek bir ‘switch’ bloğuyla hallediyorsun işi. Ve tabi ki, eğer hiçbir koşul tutmazsa diye bir de ‘default’ (varsayılan) seçeneği var. Ne güzel değil mi? Programın ne yapacağını şaşırmasını engellemiş oluyorsun.

Bir de ‘break’ olayı var bu işlerde. Switch-case’de her bir ‘case’ bloğunun sonunda bu ‘break’ komutunu koymazsanız, program bir sonraki case’in içine de girer. Yani siz 1’e basarsınız ama program hem A işlemini yapar hem de B işlemini yapar. İşte o zaman işler karışır, benim o arkadaşın hesap makinesi gibi sınıfta kalırsın :)) Bu yüzden ‘break’ komutu çok önemli. İşlem bittiğinde o bloktan çıkmasını sağlıyor.

Şimdi gelelim pratiğe. Benim gibi böyle eski kafalı bir geliştirici için bile bu yapılar olmazsa olmaz. Mesela ben bazen bir butonun aktif olup olmayacağını kontrol ederken ‘if’ kullanırım. Ya da bir kullanıcının rolüne göre farklı menüleri göstermek için yine ‘if-else’ yapısını kullanıyorum. Bu arada, yakın zamanda yaptığım bir projede, kullanıcıdan aldığım bir değeri kontrol etmem gerekiyordu. Eğer değer 1 ise şunu yap, 2 ise bunu yap, 3 ise şunu yap şeklinde. İşte tam orada ‘switch-case’ imdadıma yetişti. Çok daha temiz ve anlaşılır oldu kodum, inanın ki. Eskiden olsa alt alta bir sürü ‘else if’ dökerdim herhalde, sonra da dönüp ‘Bu ne ya?’ diye kendime kızardım.

Şimdi size basit bir örnek kod göstereyim. Bu kod, kullanıcıdan bir gün ismi alacak ve o günün hafta içi mi hafta sonu mu olduğunu söyleyecek. Hem ‘if-else’ hem de ‘switch-case’ ile nasıl yapıldığını görelim. Gerçi ben genelde böyle durumlarda ‘switch-case’i tercih ediyorum ama siz nasıl isterseniz öyle yapabilirsiniz tabi. Ama unutmayın, ‘break’ komutunu koymayı ihmal etmeyin! Yoksa benim arkadaşın başına gelen sizin de başınıza gelebilir 🙂

Öncelikle ‘if-else’ ile yapalım:

// İfade: Kullanıcıdan gün adı alıp hafta içi/sonu kontrolü // YANLIŞ: Sadece string karşılaştırması yaparken büyük/küçük harf duyarlılığına dikkat etmemek // Bu yüzden 'pazartesi' ile 'Pazartesi' farklı kabul edilebilir.

string gunAdi = "Pazartesi"; // Bu değer kullanıcıdan alınacak varsayalım.

if (gunAdi.ToLower() == "cumartesi" || gunAdi.ToLower() == "pazar") { Console.WriteLine("Hafta Sonu!"); } else if (gunAdi.ToLower() == "pazartesi" || gunAdi.ToLower() == "salı" || gunAdi.ToLower() == "çarşamba" || gunAdi.ToLower() == "perşembe" || gunAdi.ToLower() == "cuma") { Console.WriteLine("Hafta İçi."); } else { Console.WriteLine("Geçerli bir gün adı girmediniz."); }

Şimdi de aynı işi ‘switch-case’ ile yapalım. Bakın ne kadar daha derli toplu duruyor, değil mi?

// DOĞRU: switch-case yapısı ile daha temiz ve anlaşılır kontrol

string gunAdi = "Pazartesi"; // Bu değer kullanıcıdan alınacak varsayalım.

switch (gunAdi.ToLower()) { case "cumartesi": case "pazar": Console.WriteLine("Hafta Sonu!"); break; // Önemli! Bu bloktan çık. case "pazartesi": case "salı": case "çarşamba": case "perşembe": case "cuma": Console.WriteLine("Hafta İçi."); break; // Önemli! Bu bloktan çık. default: Console.WriteLine("Geçerli bir gün adı girmediniz."); break; }

Gördünüz mü? İkisi de aynı işi yapıyor ama ‘switch-case’ biraz daha okunabilir geldi bana açıkçası. Hani böyle bir sürü ‘||’ (veya) işareti yerine daha düzenli duruyor. Bu arada, bu kodları C# ile yazdım ama mantık diğer dillerde de aşağı yukarı aynıdır. Mesela Python’da da benzer yapılar mevcut.

Neticede, bu ‘if-else’ ve ‘switch-case’ yapıları, programlarımıza zeka katıyor. Onları sadece birer komut dizisi olmaktan çıkarıp, kendi kararlarını verebilen, duruma göre farklı tepkiler gösterebilen varlıklara dönüştürüyor. İnanın ki, bu temelleri sağlam attığınızda gerisi çorap söküğü gibi gelir. Yani şey gibi… neyse anladın sen 🙂

Bu arada, eğer bu konularda daha fazla örnek görmek isterseniz, Google’da ‘kontrol yapıları örnekleri C#’ diye aratarak bolca kaynağa ulaşabilirsiniz. YouTube’da da harika anlatımlar var, ben de bazen oralardan bakıyorum eski konulara. Mesela geçenlerde bir video izlemiştim, orada da farklı senaryolarla anlatıyordu, çok faydalıydı. Bakmak isterseniz YouTube’da da benzer aramalar yapabilirsiniz.

Unutmayın, programlama bir yolculuktur. Bu yolculukta karşınıza çıkan her yeni yapı, sizi daha ileriye taşıyacak bir basamak olacaktır. Kendinize iyi bakın ve bol bol kod yazın!

Bir yanıt yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.