switch case Kontrol Yapısı

Seçilen değişkenin değerinin belirli durumlara uyup uymadığını kontrol eden yapıdır. Değişkenin değeri, belirtilen birçok durumdan hangisine uyuyorsa o durum altındaki komutlar çalışır. Bunu, ben if ile de yapabilirim diye düşünebilirsiniz. Doğru düşünüyorsunuz. switch ile yaptığınız işi if yapısı ile de yapabilirsiniz. Burada switch yapısının avantajı daha düzenli kod yazmamızı sağlamasıdır. Kullanımı şu şekildedir.

switch ($degisken){
case durum1:
   // durum1 sağlanırsa çalışacak kodlar
   break;
case durum2:
   // durum2 sağlanırsa çalışacak kodlar
   break;
.
.
.
default:
   // hiçbir durum sağlanmazsa çalışacak kodlar
}

Seçilen değişkenin değeri hangi duruma uyarsa o durum altındaki komutlar çalışır. break ifadesi, durum sağlanırsa başka durumlara bakılmasını engellemek için kullanılır. Eğer break kullanmazsanız durumlardan biri sağlandığında, ondan sonraki tüm durumlar da çalıştırılır. Bu genelde istenmez. Son olarak; default ifadesinden sonra break kullanılmadığına dikkat ediniz. Çünkü default'tan sonra başka durum olmadığından break kullanmaya gerek yoktur. Aşağıdaki örneği inceleyiniz.

<?php
$sayi=2;

switch ($sayi){
   case 0: echo "Sayı 0'dır."; break;
   case 1: echo "Sayı 1'dir."; break;
   case 2: echo "Sayı 2'dir."; break;
   default: echo "Sayı 0,1 ve 2 değildir.";
}
?>

Burada $sayi değişkeninin değerlerine bakıyoruz. Değeri 2 olduğundan ekrana Sayı 2'dir. yazacaktır. echo ve break komutlarını aynı satırda buradaki gibi yazabilirsiniz. Şimdi bu işlemi if yapısı ile yapalım.

<?php
$sayi=2;

if($sayi==0)
   echo "Sayı 0'dır.";
elseif($sayi==1)
   echo "Sayı 1'dir.";
elseif($sayi==2)
   echo "Sayı 2'dir.";
else
   echo "Sayı 0,1 ve 2 değildir.";
?>

Görüldüğü üzere aynı işlemi rahatlıkla if ile de yapabilirsiniz. Tercih sizindir. Bazı durumlarda switch yapısı daha kolay olabilir.

 

Örnek: Beş üzerinden tanımlı notun yazı karşılığını ekrana yazdıralım.

<?php
$notu=2;

switch ($notu){
   case 0: echo "Başarısız"; break;
   case 1: echo "Zayıf"; break;
   case 2: echo "Geçer"; break;
   case 3: echo "Orta"; break;
   case 4: echo "İyi"; break;
   default: echo "Pekiyi";
}
?>

 

Örnek: Şimdi de sayının tek ya da çift olma durumunu ekrana yazdıralım.

<?php
$sayi=23;
switch ($sayi%2){ // sayının 2'ye bölümünden kalan
   case 0: echo "Sayı çifttir."; break;
   default: echo "Sayı tektir."; break;
}
?>

 

Örnek: Tanımlı olan işleme göre iki sayıyı işleme alıp sonucu ekrana yazalım.

<?php
$islem="*";
$sayi1=16;
$sayi2=4;

switch ($islem){
   case "+": $sonuc=$sayi1+$sayi2; break;
   case "-": $sonuc=$sayi1-$sayi2; break;
   case "*": $sonuc=$sayi1*$sayi2; break;
   default: $sonuc=$sayi1/$sayi2;
}

echo "Sonuç=$sonuc";
?>

Kontrol edeceğiniz değişken sayı olabileceği gibi buradaki gibi string bir ifade de olabilir. Aynı zamanda boolean, sabit ve dizi değişkenleri de burada kullanabilirsiniz.

 

Örnek: Tanımlı olan kullanıcıya hoş geldiniz mesajı yazdıralım.

<?php
$kullanici="Büşra";
$cinsiyet="bayan";

switch ($cinsiyet){
   case "bay": echo "Hoşgeldiniz $kullanici Bey"; break;
   default: echo "Hoşgeldiniz $kullanici Hanım";
}
?>

 

Örnek: Tanımlı olan mevsime göre ayları ekrana yazdıralım.

<?php
$mevsim="ilkbahar";

switch ($mevsim){
   case "ilkbahar": echo "Mart Nisan Mayıs"; break;
   case "yaz": echo "Haziran Temmuz Ağustos"; break;
   case "sonbahar": echo "Eylül Ekim Kasım"; break;
   default: echo "Aralık Ocak Şubat";
}
?>

 

Bu kez değişik bir örnek yapalım. Pek kullanılmasa da durum kısmında aşağıdaki gibi bir karşılaştırma da yapabilirsiniz.

Örnek: Sayının negatif, pozitif ya da sıfır olma durumunu ekrana yazdıralım.

<?php
$sayi=0;

switch ($sayi){
   case 0: echo "Sayı sıfırdır.";break;
   case $sayi>0: echo "Sayı pozitiftir.";break;
   default: echo "Sayı negatiftir.";
}
?>

Not: Burada önce sayının sıfır olma durumunu kontrol ediniz. Aksi halde hatalı sonuç alırsınız. Sıfırdan farklı sayılarla çalışırken istediğiniz sırada durumları ifade edebilirsiniz.

 

Örnek: 100 üzerinden tanımlanmış bir notun 5 üzerinden karşılığını ekrana yazdıralım.

<?php
$notu=64;

switch (true){
   case 85<=$notu: echo "5-Pekiyi"; break;
   case 70<=$notu: echo "4-İyi"; break;
   case 55<=$notu: echo "3-Orta"; break;
   case 45<=$notu: echo "2-Geçer"; break;
   case 25<=$notu: echo "1-Zayıf"; break;
   default: echo "Başarısız";
}
?>

 

Örnek: Tanımlı olan 3 sayıdan en büyüğünü bulalım.

<?php
$sayi1=10;
$sayi2=7;
$sayi3=15;

switch (true){
   case ($sayi1>=$sayi2 and $sayi1>=$sayi3): $eb=$sayi1; break;
   case ($sayi2>=$sayi1 and $sayi2>=$sayi3): $eb=$sayi2; break;
   default: $eb=$sayi3;
}

echo "En büyük sayı: $eb";
?>

 

Görüldüğü gibi durum kısmında mantıksal operatörler de kullanabilirsiniz. Bunun yanında true kısmına bakarsanız burada biraz farklı bir işlem yapılmıştır. Zira kontrol edilen bir değişken değil tam tersine durumdur. Yani durumlardan hangisinin true olduğunu kontrol ettik. Normalde hep bir değişkenin hangi duruma uyduğunu kontrol ediyorduk.

 

Örnek: Tanımlı olan sayıya karşılık gelen günü ekrana yazdıralım.

<?php
$gun=4;
switch ($gun){
   case 1: echo "Pazartesi";break;
   case 2: echo "Salı";break;
   case 3: echo "Çarşamba";break;
   case 4: echo "Perşembe";break;
   case 5: echo "Cuma";break;
   case 6: echo "Cumartesi";break;
   default: echo "Pazar";
}
?>

 

Örnek: Hafta içi çalışanların maaşına 50 TL, hafta sonu çalışanların maaşına 70 TL ekleyelim.

<?php
$maas=500;
$gun="salı";

switch ($gun){
   case "pazartesi":
   case "salı":
   case "çarşamba":
   case "perşembe":
   case "cuma":$maas+=50;break;
   case "cumartesi":
   default: $maas+=70;
}

echo "Maaş=$maas";
?>

Oldukça ilginç bir kullanım. Biraz açıklamaya çalışalım. Bir durumdan sonra komut yazmak zorunda değilsiniz. Bu, sonraki duruma geçmek için kullanılır. Hafta içindeki günlerden biri ise pazartesi, salı, çarşamba, perşembe ya da cuma olması fark etmiyor. Eğer bu durumlardan birine girilirse break olmadığı için cuma'ya kadar gidilir ve cuma durumunda 50 TL eklenir. Sonra break ile hafta sonuna geçilmesi engelleniyor. Aynı mantıkla cumartesi için break kullanılmayarak pazar gününe gidiliyor ve 70 TL ekleniyor. Diyelim ki; günlerden salı olsun. Salı durumuna girildi break olmadığı için cuma'ya kadar gidildi ve 50 TL eklendi ve break ile çıkıldı. Diyelim ki cumartesi; break olmadığı için pazar'a gidilir ve 70 TL eklenir. Tabiki bu bizim algoritmamızdır. Bilindiği gibi sonuca giden yol tek değildir. Siz de kendi çözümünüzü geliştirebilirsiniz.