Bu makalemizde C# Biliyorum makaleleri serimizin ikincisinde C# içerisindeki döngülere ve kontrol mekanizmalarına değiniyor olacağız. Öncelikle bir önceki makalemizde ki bilgilerimizin üstüne yeni bir kat çıkacağımızı bu yüzden bir önceki makaledeki bilgileri unutmamamız gerektiğini unutmamanın da pratik ile sağlandığını belirtelim ve makalemize başlayalım.
Kimimizin VB içerisinde kimimizin ise başka programlama dilleri içerisinde karşılaştırmak için kullandığımız kontrol mekanizmalarından en önemlisi IF yapısıdır. If yapısını en temel ifade ile anlatmaya çalışırsak, bir değeri başka bir değer ile karşılaştırıp aynı ise veya farklı ise bazı işlemler gerçeklemek için kullandığımız kontrol yapısı diyebiliriz. Yani :
Yukarıda görülen resimdeki gibi bir program yazdığımızı düşünelim. Kullanıcıdan 1 ile 10 arasında bir rakam talep ediyoruz. Kullanıcının doğru girip girmemesi kendi insafına kalmış.
Not: Şimdilik kullanıcının örf ve adetlere uygun bir şekilde sadece rakam gireceğini varsayıyoruz. Karakter girerse ne olacağı makalemizin konusunun dışında kalıyor. Bu konuyu başka bir makalede irdeliyor olacağız.
txtTahmin isimli textBox kontrolüne kullanıcı bir rakam girecek. Daha sonra biz kod tarafında oluşturacağımız rastgele (Random) bir sayıyı alttaki txtSonuc isimli TextBox a yazacağız. Eğer iki sayı birbiri ile aynı ise ekrana MessageBox.Show() metodu yardımı ile bir uyarı mesajı vereceğiz.
Bu karşılaştırmayı VB içerisinde yapmak için aşağıdaki gibi bir kod yazmamız yeterli oluyordu :
Yukarıdaki kodda eğer txtTahmin.text = txtSonuc.text ise yani tahmin textboxunun değeri sonuc textboxunun değerine eşit ise 5 numaralı satırdaki kod, eğer eşit degil ise 7 numaralı satırdaki kod çalışıyordu. Öncelikle bu kodun C# içerisindeki karşılığını görelim sonra biraz If kontrol mekanizmasını açıklayalım :
If kontrol mekanizması verilen iki değeri belirttiğimiz koşula göre karşılaştırıp geriye boolean (true / false) türden bir bilgi döndürür. If yapısını şema ile anlatmak istersek eğer
Bu şekilde bir şema açıklayıcı olacaktır. If satırında ?= =? olarak belirttiğimiz ifade koşulumuzdur. Yani solundaki değer ile sağındaki değerin birbirine eşit olup olmadığına bakıyor ve boolean türden bir değer döndürüyor. Bunun dışında hepimizin bildiği diğer karşılaştırma ifadeleri C#'ta da aynıdır
|
VB |
C# |
|
= |
= = |
|
> |
> |
|
< |
< |
|
>= |
>= |
|
<> |
!= |
Visual Basic ile kodlama yaparken, if içerisinde tek satır değilde birden fazla satırın işlem görmesini istiyorsak özel bir şey yapmamıza gerek yoktu fakat C# içerisinde bunun için
süslü parantezleri kullanıyoruz.
{
}
Yukarıdaki örnekten ilerlemek istersek kullanıcı sayıyı doğru tahmin edemediğinde txtTahmin isimli textbox 'ın içeriğini temizleyelim :
Yukarıdaki şekilde de gördüğümüz gibi else bloğunda iki satır kod çalıştırmak istediğim için, iki satır kodu süslü parantezler arasına alarak çalışmalarını sağladık.
SWITCH :
Şimdi gelelim bir başka kontrol mekanizmasına. If gibi çalışan Visual Basic de Select Case yapısı olarak bildiğimiz yapının C# taki karşılığı Switch Case dir. Bu yapı bize ne gibi bir avantaj sağlıyor bunu görüyor olacağız.
Bu şekilde bir proje geliştireceğimizi düşünelim. Kullanıcı cmbAylar isimli comboBox kontrolünden bir eleman seçecek. Bizde o ayın hangi Mevsimde olduğunu bulup txtMevsim isimli textBox kontrolüne yazıyor olacağız.Öncelikle yapıyı inceleyelim :
Şema :
Yukarıdaki şemada görüldüğü gibi switch için şöyle bir tanım kullanmamız doğru olacaktır. Switch, birden fazla if else bloklarının okunabilirlik açısından daha kolay kodlanmasıdır. Mesela kullanıcıdan aldığımız bir sayının 1 ile 5 arasında hangi rakama karşılık geldiğini bulmak için if deyimini seçtiyseniz :
(VB) :
(C#) :
Bahsettiğimiz programı VB veya C# ile if yapısını kullanarak yazmak istiyorsak bu şekilde kodlama yapabiliriz. Fakat bu kodlama öncelikle okunabilirlik açısından çok iyi değil. Switch deyimi ile bu okunabilirliği arttırabiliriz.Bunun dışında yukarıdaki if bloklarını else if deyimi ile değil, hepsini sadece if deyimi ile kodlasaydık, program akışı sırasında tüm if deyimleri okunacaktı ve yorumlanacaktı. Bu durumda da if bloklarında sadece MessageBox.Show("x rakamı girildi") gibi bir kod bloğu yerine uzun süren hesaplamalar veya veritabanı ile ilgili işlemler yapılıyor olsaydı, her bir satır için tüm if deyimleri tekrar tekrar kontrol edilecekti.
İşte ikinci olarak da bu sorundan kurtulmak için switch yapısını kullanıyor olacağız. Şimdi gelelim yukarıdaki ufak programın switch ile yapılmasına :
(VB) :
(C#) :
Çalışma mantığına değinecek olursak,
- switch {} parantezleri arasında ki case blokları switch (koşul) satırındaki koşulun sonucu için seçenekleri sunar.
- default : deyimi switch deyiminde tanımlanan case seçenek bloklarından hiçbirinin doğrulanamaması durumunda çalıştırılacak olan seçenek bloğunu ifade eder. Yukarıdaki örnekten gidecek olursak, kullanıcı eğer 7 rakamını girerse TextBox kontrolüne bu durumda switch yapısındaki hiçbir case bloğu çalışmayacaktır. Fakat case bloklarından sonra birde default deyimi ile tanım yaparsak case bloklarımızın hiçbiri çalışmaz ise default deyimi çalışacaktır.
- Her case bloğunun bitişi break anahtar kelimesi ile tanımlanır.break anahtar kelimesi case bloğunun bittiğini ve başka case bloklarının kontrol edilmemesi gerektiğini, yani switch yapısından artık çıkılabilineceğini söyler.
Switch yapısı ile ilgili b,r konudan daha bahsedelim. Bazen girilen bir sayılın herhangi bir aralıkta olup olmadığını kontrol etmemiz gerekebilir. Mesela bizim mevsim örneğimiz bu konu için uygun olacaktır. Önce örneğimizi yapalım sonrada yorumlayalım.
Yukarıdaki kodda gördüğümüz gibi eğer seçilen ay Aralık, Ocak, Şubat aylarından herhangi biri ise Kış Mevsimi bilgisini txtMevsim isimli kontrolün text özelliğine yazacağız. Bunun için 3 tane case bloğuna ihtiyacımız var.Ama 3 case bloğunun içeriğini teker teker yazmaktansa yukarıdaki şekilde olduğu gibi birden fazla case bloğunun aynı kodları çalıştırmasını sağlayabiliriz.Yukarıdaki örnekte comboBox içerisinden seçilen elemanın index ini kontrol ediyoruz. Koşul olarak onu bildirdik ve çıkabilecek muhtemel bütün sonuçları case bloklarında tanımladık. cmbAy isimli combobox içerisinde 12 ayın her birine karşılık gelen 12 adet eleman bulunmakta.
0: Ocak
1: Şubat
2: Mart
3: Nisan
4: Mayıs
5: Haziran
6: Temmuz
7: Ağustos
8: Eylül
9: Ekim
10: Kasım
11: Aralık
Bu elemanlardan
0,1,11 indexli olanlardan herhangi biri seçilirse txtMevsim isimli textbox ta Kış,
2,3,4 indexli olanlardan herhangi biri seçilirse txtMevsim isimli textbox ta İlkbahar,
5,6,7 indexli olanlardan herhangi biri seçilirse txtMevsim isimli textbox ta Yaz,
8,9,10 indexli olanlardan herhangi biri seçilirse txtMevsim isimli textbox ta Sonbahar,
bilgisi görünecek. Bu durumda kodlama yaparken
case 0:
case 1:
case 11:
txtMevsim.Text := "Kış Mevsimi";
break;
kodları ile 3 seçenekten hangisi seçilirse seçilsin bu kodun çalışmasını istediğimizi bildirmiş olduk.
Switch kontrolünün kullanım kurallarından bahsedecek olursak.
- Aynı seçenek için birden fazla case tanımlanamaz.
- default bloğunun tanımlanması isteğe bağlıdır zorunlu değildir.
- Seçenekler değişken olamaz.
- Seçenekler tamsayı veya string ya da char dediğimiz veri tiplerinden olabilir.
Böylelikle bir makalemizin daha sonuna geldik. Bir sonraki makalemiz de C# içerisindeki döngü yapılarına değiniyor olacağız.
Başka bir makalemizde tekrar görüşmek üzere hepinize iyi çalışmalar.
Bora BURGUCUGİL
bora.burgucugil@bilgeadam.com
---------------------------------------------
Bilge Adam Bilgi Teknolojileri Akademisi
Bireysel Yazılım Geliştirme Eğitmeni - Beşiktaş