Yazılım geliştirmeye başladığınızda, programların her zaman baştan sona dümdüz bir sırayla ilerlemediğini fark edersiniz. Programların, kullanıcının seçimine göre farklı yollara sapmaları, belirli bir işlemi yüzlerce kez tekrarlamaları veya beklenmedik kullanıcı hatalarına karşı önlem almaları gerekir. İşte programın ilerleyeceği yönü belirleyen bu mekanizmalara Kontrol Yapıları denir,. C# Windows Forms uygulamaları “olay yönelimli” (event-driven) çalıştığı için, bir butona tıklandığında veya bir metin kutusuna yazı yazıldığında ne olacağını bu kontrol yapıları ile belirlersiniz.
C# WINDOWS FORM KONTROL YAPILARI EĞİTİM VİDEOMUZ İÇİN TIKLAYIN
Bu kapsamlı rehberde, C# Windows Forms programlamanın belkemiği olan Karar İfadeleri, Döngüler ve Hata Ayıklama yapılarını günlük hayattan örneklerle öğreneceksiniz.
1. Karar İfadeleri (Decision Structures)
Karar ifadeleri, koşula bağlı olarak programın nasıl ilerleyeceğini belirleyen yol ayrımlarıdır. Tüm programlama dillerinin en vazgeçilmez yapılarıdır. Bu yapılar içerisinde iki değeri birbiriyle karşılaştırmak için genellikle < (küçükse), > (büyükse), == (eşitse) ve != (eşit değilse) gibi karşılaştırma operatörleri kullanılır.
if Yapısı (Eğer)
if yapısı, sadece belirtilen şart sağlandığında (sonuç true olduğunda) çalışması istenen kodlar için kullanılır. Şart sağlandığında süslü parantez içindeki kodlar çalıştırılır, şart sağlanmazsa (false) bu kodlar atlanır.
Örnek: Bir Windows Form uygulamasında, kullanıcının girdiği yaşı TextBox (metin kutusu) üzerinden alarak ehliyet alıp alamayacağını kontrol edelim.
byte yas = Convert.ToByte(textBox1.Text);
if (yas > 17)
{
MessageBox.Show("Ehliyet başvurusunda bulunabilirsiniz.");
}
if-else Yapısı (Eğer – Değilse)
Şartın sağlandığı durumda bir kod, sağlanmadığı aksi durumda ise başka bir kod çalıştırmak istiyorsak if-else yapısı kullanılır. Şart doğruysa if bloğu, yanlışsa else bloğu çalışır.
Örnek: Kullanıcıdan istenen kullanıcı adı doğruysa sisteme giriş yapılmasını, değilse uyarı verilmesini sağlayalım. Aynı zamanda akıllı ev projesinde CheckBox (Onay Kutusu) işaretli ise “Lambalar Açık”, işaretli değil ise “Lambalar Kapalı” sonucunu ListBox nesnesine yazdırabiliriz,.
if (checkBox1.Checked == true)
{
listBox1.Items.Add("Lambalar Açık");
}
else
{
listBox1.Items.Add("Lambalar Kapalı");
}
else if Yapısı
Şartın sağlanmadığı durumlarda yeni bir şart ifadesi daha eklemek için else if kullanılır. İstenildiği kadar else if alt alta sıralanabilir.
Örnek: TextBox içerisine girilen 100’lük sistemdeki bir notu 5’lik sisteme çeviren bir program düşünelim. Girilen notun sayi < 25, sayi < 45, sayi < 55 gibi şartlarla arka arkaya kontrol edilmesi işlemi else if ile çok kolay bir şekilde gerçekleştirilir,.
Switch-Case Yapısı
Bir ifadenin aldığı değere bağlı olarak, program için birçok farklı çalışma yolu belirleyen komuttur. İç içe yazılmış karmaşık if-else yapılarına göre çok daha okunaklıdır. switch ifadesindeki değer, hangi durumun (case) değeri ile eşleşiyorsa o duruma ait kodlar çalışır.
Eşleşen kodlar çalıştıktan sonra bloktan çıkmak için break; komutu kullanılır. Hiçbir durum eşleşmezse default ifadesinde belirtilen kodlar çalışır. Örneğin bilgisayarın o anki tarihine göre haftanın hangi gününde olduğumuzu (DateTime.Now.DayOfWeek) bularak “Pazartesi”, “Salı” gibi sonuçları ekrana yazdırmak için mükemmel bir yöntemdir.
2. Döngüler (Loops)
Programda belirli kod bloklarının tekrar tekrar çalıştırılmasını sağlayan yapılara döngü denir. Örneğin, 1000 adet ürün arasından bir barkod numarasına ait bilgileri bulmak için arka arkaya 1000 defa if yazmak imkansızdır; bunun yerine döngü ifadesi içinde tek bir if kullanmak yeterlidir.
for Döngüsü
Genellikle kodların tekrar çalışma sayısı belli olduğunda for döngüsü kullanılır. Döngü, başlangıç değeri, şart ifadesi ve bir artış/azalış sayacından oluşur.
Örnek: Bir ListBox nesnesinin içine 1’den 10’a kadar olan sayıları hızlıca eklemek için aşağıdaki döngü kullanılır,. Burada i değişkeni 1’den başlar ve şart ifadesi olan i <= 10 sağlanana kadar her dönüşte i++ sayacı ile birer birer artırılır.
for (int i = 1; i <= 10; i++)
{
listBox1.Items.Add(i);
}
while Döngüsü
Şart ifadesi sağlandığı sürece çalışmaya devam eden bir döngü yapısıdır. for döngüsünden farklı olarak, döngü başlangıç değişkeni genellikle döngünün dışında tanımlanır ve döngünün içinde değiştirilir (artırılır veya azaltılır).
do-while Döngüsü
while döngüsüne çok benzer ancak çok temel bir farkı vardır: do-while döngüsünde şart ifadesi döngünün en başında değil, en sonunda kontrol edilir. Bu özellik sayesinde şart ifadesi (koşul) sağlanmasa dahi döngü en az bir kez kesinlikle çalışır,.
Döngüyü Kesme ve Devam Ettirme (break ve continue)
Döngüler normalde şart ifadesi bitene kadar döner. Ancak bazen bir müşteriyi veya bir dosyayı ararken, sonucu bulduğumuz an döngünün gereksiz yere çalışmasını durdurmak isteriz.
- break: Programın çalışma performansını artırmak için döngüyü kesintiye uğratır ve tamamen sonlandırır.
- continue: Döngüyü tamamen sonlandırmaz, sadece o anki adımı atlar ve döngünün bir sonraki adımdan devam etmesini sağlar,.
3. Hata Ayıklama (Try-Catch-Finally)
Kullanıcının veri girişine dayalı programlarda verinin doğru girilmesi çok önemlidir. Örneğin bir uygulamanın TextBox nesnesine kullanıcının bir sayı girmesi gerekirken yanlışlıkla “A” harfi girmesi, dönüştürme hatasına yol açar ve programın aniden çökerek kapanmasına neden olur,.
Kod editörü, kod yazım kuralı hatalarını (noktalı virgül eksikliği vb.) derleme öncesinde bulabilirken, kullanıcının veri girişinden kaynaklanan çalışma zamanı hatalarını tespit edemez. Bu tip durumların programı çökertmesini engellemek için try-catch-finally blokları kullanılır.
- try: Hata meydana gelme olasılığı olan kodlar bu bloğun içine yazılır.
- catch:
trybloğu içindeki kodlarda bir hata oluşursa, program çökmek yerinetrybloğundan çıkar vecatchbloğu içerisindeki kodları çalıştırır. Böylece program çalışmaya devam eder ve kullanıcıyaMessageBoxile örneğin “Hatalı giriş yaptınız!” gibi kibar bir mesaj verilebilir. - finally:
trybloğunda hata meydana gelse de gelmese de kesinlikle çalıştırılması gereken kodlar (örneğin açık bir veritabanı bağlantısının veya dosyanın kapatılması) bu bloğun içine yazılır,. Kullanımı zorunlu değildir, tamamen tercihe bağlıdır.
Özetle; C# ve Windows Forms teknolojilerinde harika arayüzler tasarlamanın yanı sıra, arka plandaki iş mantığını doğru kontrol yapılarıyla inşa etmek şarttır. if yapıları ile mantıksal kontroller yapmayı, for döngüleriyle nesneler üzerindeki verileri listelemeyi ve try-catch blokları ile güvenli programlar üretmeyi öğrenmek, sizi çok daha profesyonel bir yazılımcı haline getirecektir. Bol pratik yaparak bu konuları kalıcı olarak pekiştirebilirsiniz.




