C# Switch Case Komutu

Switch Case komutu aynı if komutunda olduğu gibi değişkenin aldığı değere göre işlem yapmaktadır. Mantık olarak if ile aynı işi yapsa da yapıları çok farklıdır. If komutunda genellikle şart varken switch komutunda genelde değişkenin alacağı değerin durumuna göre işlem yapılmaktadır.

Programcılar her iki komutu da ihtiyaçları doğrultusunda kullanabilir. Ben genellikle if komutu kullanmayı tercih etmekteyim. Hem kullanım kolaylığı, hem esnekliği ve en önemlisi de alışkanlıklardan dolayı bu tercihi yapmaktayım. Neyse kullanım zamanını bir kenara bırakıp kullanım şekline bakalım.

switch (değişken)
{
   case değişken_degeri: 
         yapılması istenen işlemler; 
   break;
   case değişken_degeri: 
         yapılması istenen işlemler; 
   break;
   .
   .
   .
   default:
     belirlenen değerler dışında bilgi gelirse yapılacak işlemler ;
   break;
}

 

Yukarıda da gösterildiği gibi switch komutu  switch (değişken) komutu ile değişkenin ismini ve değerini ilk satırda alır.

Daha sonra her case satırında değişkenin değerini belirtilen değerle karşılaştırır ve eşitlik hangi case satırında sağlanırsa hemen altında bulunan satırlarda bulunan kodlar çalıştırılır ve istenilen işler bittikten sonra break komutu ile case işleminin durumu biter ve diğer case satılarına bakılmaz. Eğer case satırlarının hiçbirisi sağlanmazsa default satırında belirlenen kodları çalıştırılır (Aynen if komutundaki else gibi).

Dikkat etmeniz gereken noktalar şunlardır.
-switch kelimesi, bu ifadenin başlangıcını yapar.
-switch kelimesini yazdıktan sonra parantez içine bir değişken adı yazılmalıdır. Burada başka bir işlem yapılmaz.
-switch parantezleri içinde double, decimal tipinde değişken kullanılmaz.
-Değiskenin tipi string veya nümerik olabilir.
-case kısmında sabit değerler yer almalıdır. Yani karşılaştırmalardan çok direk olarak hangi değer alacağını yazmak mantıklıdır.
-Her bir case ifadesinde, kodlar bittikten sonra yeni bir case başlamadan break anahtar kelimesi unutulmamalıdır.
-case etiketinden sonra istenen sayıda deyim satırı bulunabilir.
-case’den sonra { } işaretlerine gerek yoktur. break komutu bu işleri yerine getirmek için yeterlidir.
-Her zaman default bölümünü kullanmanız program yazarken hataları kolayca bulabilmenizi sağlar ancak kullanmak zorunlu değildir.
-En çok rastlanan hata break; deyiminin unutulmasıdır. Bunu unutmamız gerekmektedir.

Bir örnekle daha iyi anlaşılacağını düşünmekteyim. İlk olarak klasik örneklerden birisi ile başlayalım. Programımız bir textbox içine gün sayısı yazacağız ve bize hangi gün olduğunu verecek. Buton1’in click olayına aşağıdaki kodları yazıyoruz. Ve tıkladığımızda sonuç karşımıza çıkacak.

private void button1_Click(object sender, EventArgs e)
        {
            int gun = Convert.ToInt32(textBox1.Text);
            switch (gun)
            {
                case 1:
                   label2.Text="Pazartesi";
                    break;
                case 2:
                   label2.Text="Salı";
                    break;
                case 3:
                    label2.Text="Çarşamba";
                    break;
                case 4:
                    label2.Text="Perşembe";
                    break;
                case 5:
                    label2.Text="Cuma";
                    break;
                case 6:
                    label2.Text="Cumartesi";
                    break;
                case 7:
                    label2.Text="Pazar";
                    break;
                default:
                    label2.Text = "Hatalı giriş yaptınız.";
                    break;
            }
        }

Bu kodlarda programımız textBox içindeki bilgiyi alarak sayıya çevirmekte ve gun değişkeni içine kaydetmektedir.  Switch komutu ise gun değişkeninin alacağı değerlere göre case ifadelerindeki karşılığına bakarak karar vermektedir. Örneğin biz 4 değerini girdik. case 1: satırı kontrol ediliyor durum eşleşmediği için sonraki satıra bakılıyor. Taki eşleşen satıra gelene kadar. case 4: satırı bizim girdiğimiz bilgi ile eşleştiği için hemen altında bulunan satılar yani ; label2.Text=”Perşembe”; break; satırları çalıştırılıyor ve label’a Perşembe yazılıyor. Artık diğer satırlara kontrol etmeye gerek yok. Switch komutu işini yaptı ve programımız çalıştı. Switch komutunun bir güzel yanıda bu if ile bu programı yaparsanız ve eğer else if kullanmadıysanız tüm satırlar mecbur kontrol edilecekti. Switch komutunda buna gerek yok çünkü switch komutu aynı değeri tekrar girmenize imkan vermez. if ile aynı şartı defalarca kontrol edebilirsiniz.

bir örnekte şöyle verelim.

Örnekte olduğu gibi 2 sayı ve bir işlem operatörü seçeceğiz ve buna göre işlem yapılarak sonuç label’a yazılacak.

private void button1_Click(object sender, EventArgs e)
{
   double sayi1, sayi2, sonuc;
   string islem;
   sayi1 = Convert.ToDouble(textBox1.Text);
   sayi2 = Convert.ToDouble(textBox3.Text);
   islem = textBox2.Text;
   switch (islem)
   {
     case "+" :
       sonuc = sayi1 + sayi2;
       label5.Text = sonuc.ToString();
       break;
     case "-":
       sonuc = sayi1 - sayi2;
       label5.Text = sonuc.ToString();
       break;
     case "*":
       sonuc = sayi1 * sayi2;
       label5.Text = sonuc.ToString();
       break;
     case "/":
       sonuc = sayi1 / sayi2;
       label5.Text = sonuc.ToString();
       break;
     case "%":
       sonuc = sayi1 % sayi2;
       label5.Text = sonuc.ToString();
       break;
     default :
       label5.Text = "Hatalı işlem seçimi" ;
       break;
    }
}

 

Burada da seçilen işlem türüne göre işlemler yapılacak Label’a sonuç yazılmakta. işlemi string türünde seçme nedenimiz ise karşılaştırma yapacağımız değişken değerinin sayı değil bir karakter olmasıdır. Tek karakter olduğu için istenirse char türünden de kullanılabilir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir