C Sharp Programlama Dili/Akış kontrol mekanizmaları – switch yapısı
switch
switch deyimi bazı if else deyimlerinin yaptığı işi daha az kodla yapar. Genellikle bazı karmaşık if else bloklarını kurmaktansa switch’i kullanmak programın anlaşılırlığını artırır. Ancak tabii ki basit if else bloklarında bu komutun kullanılması gereksizdir. Kuruluşu:
switch(ifade)
{
case sabit1:
komut1;
break;
case sabit2:
komut2;
break;
default:
komut3;
break;
}
Bu switch deyimiyle ilgili bilmeniz gerekenler:
- İfadenin ürettiği değer hangi case sabitinde varsa o “case”deki komutlar işletilir. Eğer ifadenin ürettiği değer hiçbir case sabitinde yoksa default casedeki komutlar işletilir.
- Aynı birden fazla case sabiti olamaz. Örneğin:
using System; class AkisKontrolMekanizmalari { static void Main() { int a=4; switch(a) { case 4: Console.Write("deneme1"); break; case 4: Console.Write("deneme2"); break; case 5: Console.Write("deneme3"); break; default: Console.Write("deneme4"); break; } } }
Bu program hatalıdır.
- C#’ta herhangi bir case’e ait komutların break; satırı ile sonlandırılması gerekmektedir. Eğer break; satırı ile sonlandırılmazsa programımız hata verir. Örneğin aşağıdaki program hata vermez:
using System; class AkisKontrolMekanizmalari { static void Main() { int a=4; switch(a) { case 4: string a=Console.ReadLine(); Console.Write(a); break; default: Console.Write("deneme4"); break; } }
Ancak şu program hata verir:
using System;
class AkisKontrolMekanizmalari
{
static void Main()
{
int a=4;
switch(a)
{
case 4:
string a=Console.ReadLine();
Console.Write(a);
default:
Console.Write("deneme4");
break;
}
}
}
- Eğer programımızın bir case’deyken farklı bir case’e gitmesini istiyorsak goto anahtar sözcüğünü kullanırız. Örnek:
using System;
class AkisKontrolMekanizmalari
{
static void Main()
{
int a=5;
switch(a)
{
case 4:
string a=Console.ReadLine();
Console.Write(a);
break;
case 5:
Console.Write("Şimdi case 4'e gideceksiniz.");
goto case 4;
default:
Console.Write("deneme4");
break;
}
}
}
- goto satırı kullanılmışsa break; satırının kullanılmasına gerek yoktur.
- Eğer farklı case sabitlerinin aynı komutları çalıştırmasını istiyorsak şöyle bir program yazılabilir:
using System;
class AkisKontrolMekanizmalari
{
static void Main()
{
int a=5;
switch(a)
{
case 4:
case 5:
string a=Console.ReadLine();
Console.Write(a);
break;
default:
Console.Write("deneme4");
break;
}
}
}
Bu programda a değişkeni 4 olsa da 5 olsa da aynı komutlar çalıştırılacaktır.
- case anahtar sözcüğünün yanındaki ifade mutlaka ya sabit ya da sabitlerden oluşan bir ifade olmalıdır.
- default durumunu istediğiniz yere yazabilirsiniz, aynı şekilde istediğiniz case’leri de istediğiniz yere yazabilirsiniz. Yani case’lerin sırası önemli değildir.
- Bir switch bloğunda default durumu bulunmak zorunda değildir.
- switch’in parantez içindeki ifadesi bir değişken olabileceği gibi, bir sabit ya da ifade de olabilir.