Karar yapıları

23 Mayıs 2008 Cuma

Karar yapıları, php içerisinde bir betik boyunca yürütme işlemlerinin akışını kontrol etmemizi sağlar. Bunlar koşullu kontrol yapıları ve döngüler olarka iki grupta toplanırlar.

Koşullu karar yapıları;

Kullanıcı girdilerine mantıklı yanıtlar verebilmemiz için, kodumuzun karar yeteneğine sahip olması gerekmektedir. Programlarımızın karar vermesini sağlayan yapılar koşullu karar yapıları, veya koşullu deyimler olarak adlandırılırlar. Bu bölümde if....else, switch....case, ve alternatif karar yapıları üzerinde durmaya çalışacağız.

a- if karar yapıları;

Bu karar yapısı, içindeki şart ifadesi true değer döndürdüğünde kod yada kod bloglarını çalıştırmamıza yarar. Karar yapısı içindeki şart, true ya da false değer döndüren herhangi bir karşılaştırma ifadesi yada mantıksal bir ifade olabilir. Kodumuzu kod bloğu içine aldığımızda(süslü parantez), koşul doğru olduğunda takip eden kod bloğu çalıştırılacaktır. if deyimlerindeki koşulların ( ) -parantez- içerisine alınması gerekir. Deyimin yapısı aşağıdaki gibidir.

if(koşul) komut;

veya süslü parantezler içerisinde -ki bu oldukça sağlıklıdır-

if(koşul) {
komut 1;
komut 2;
komut N;
}

- Kod blokları:

Çoğunlukla if koşullu deyimleri içersinde çalıştırmak istediğimiz birden fazla deyim bulunur. Bunların her birinin başına if koymak gerekmez. Bunun yerine örtüşen deyimleri, bir kod bloğu olan { süslü parandezler arasına } almamız işimizi oldukça kolaylaştıracaktır.

<?php
$mehmet = "öğrenci";

if($mehmet == "öğrenci") {
echo "<font color=navy>";
echo "Mehmet bir".$mehmet."dir";
echo "</font>";
}

?>

Yukarıdaki örneğimizde süslü parantezlerimiz içerisine aldığımız deyimleri if şartının true değer döndürmesi sonucunda ekrana bastırdık. Buradaki süreç şöyle gerçekleşmektedir: $mehmet değişkenimize atadığımız öğrenci değeri, if yapısı içerisinde şartın sağlanıp sağlanamadığını kontrol etmemiz için değerlendirildi. Koşulun doğruluğu programda test edilerek true tipinde bir boolean değer gönderildi ve süslü parantezler içerisindeki deyimlerimiz sırasıyla çalıştırıldı. Burada koşulumuz doğru ise süslü parantezler içerisindeki kod bloğumuzun çalıştığına dikkat ediniz. Peki eğer koşulumuz false(Yanlış) olsaydı ne olacaktı? Koşulun doğru veya yanlış olduğu durumlara göre kodumuzun karar vermesi için if yapısı içindeki else mekanizmasını kullanırız. burada else mekanizması koşulun false olduğu durumlarda gerçekleştirmek istediğimiz alternatif bir eylemin kodumuz içinde değerlendirilmesini sağlar. Şimdi yukarıdaki kod parçamızı else mekanizmasını kullanarak yeniden değerlendirelim.

$mehmet = "öğretmen";

if($mehmet == "öğrenci") {
echo "Mehmet bir öğrencidir.";
} else {
echo "Mehmet bir öğretmendir.";
}

örneğimizi incelediğimizde, if karar yapısının true değer döndürdüğünde, if deyiminin altındaki kod bloğumuz, false değer döndürdüğünde ise else deyiminin altındaki kod bloğumuzun çalıştırıldığını farketmişsinizdir. Bu karar yapısı aşağıdaki biçimde çalışır.

if(koşul)
{
eylem1;
eylem1;
}
else
{
eylem2;
eylem2;
}

elseif deyimleri;

Programlarımızı kodlarken kontrol edeceğimiz bir çok kararda ikiden fazla seçenek bulunabilir. else if deyimi bu tür durumlar için birden fazla seçenekten oluşan bir seri kontrol mekanizması gerçekleştirebilmemizi sağlarlar. elseif deyimi else ve if deyimlerininbirleşimlerinden oluşur. Kodumuza elseif ile gerçekleştirdiğimiz bir koşullar serisi sunduğumuzda, php true olanı bulana kadar her şartıkontrol edecektir.
Örneğin bir web sitemiz var ve ziyaretçilerin web sitemizi nereden duyduklarını öğrenmek istiyoruz. Bunun için elseif deyimini kullanarak basitçe bir karar kontrol yapısı kurup ziyaretçilerimizin seçimlerini işleyebiliriz.

<?php
$nereden = 3;
if($nereden == 1) {
echo "Tv Gazete ve dergi reklamlarından öğrendim";
} elseif ($nereden == 2) {
echo "Arkadaşımdan duydum";
} elseif ($nereden == 3) {
echo "Arama motorları yönlendirdi";
} elseif ($nereden == 4) {
echo "Tesadüfen sitenize girdim";// Çıktımız
Arama motorları yönlendirdi olur
}
//
$nereden değişkenine farklı numaralar atayarak durumu kontrol edebilirsiniz.
?>

Kodumuz bu örnekte verileri bir form değerinden almıyor. $nereden değişkeninin değeri dört seçimli bir form değişkeninden alınıp rahatça işlenebilir.Yukarıda görüldüğü gibi programımız true sonunucu bulana kadar her seçeneği tek tek işleyip true değerini bulduğunda o seçenekle ilgili olan kod bloğumuz çalıştırıp bize ulaşmak istediğimiz veri parçasını sundu.
Bu yapıda önemli olan bu tür basamaklı elseif yapılarında php motorumuz, bloglar ve deyimlerin sadece birini çalıştırır. Eğer koşullarımızın birden fazlası doğru olacak çekilde bir elseif basamaklı yapısı kurarsak, sadece ilk doğru koşulu takip eden deyimimiz ve ona bağlı olan blok çalıştırılır. Bu gibi durumların üstesinden gelebilmek için biz switch deyimlerini kullanırız.

b- switch, case karar yapıları;

switch deyimi if deyimine benzer biçimde çalışır ancak koşulun ikiden fazla değer almasına olanak sağlar. if deyiminin içine koşul true yada false olabilir. Oysa switch deyiminde, koşul çeşitli sayıda farklı değerler alabilir. Tepki vermek istenilen bir değeri kullanabilmemiz için, case mekanizmasını kullanmamız gerekir. Eğer belirli bir case deyimi ifade etmek istmediğimiz değerle için varsayılan bir durum ayarlayabiliriz.
Yukarıda vermiş olduğumuz örneği switch yapısı için yeniden düzenleyelim.

$nereden = 2;
switch($nereden)
{
case 1:
print "Tv Gazete ve dergi reklamlarından öğrendim.";
break;
case 2:
print "Arkadaşımdan duydum";
break;
case 2:
print "Arkadaşım mesaj yolladı";
break;
case 3:
print "Arama motorları yönlendirdi";
break;
case 4:
print "Tesadüfen sitenize girdim";
break;
} // Örneğimiz Arkadaşımdan duydum çıktısını vercektir.

bu deyim if else deyiminden farklı biçimde işler. if deyimi süslü parantezler kullanılmadığı takdirde, tek bir deyimi etkiler, switch ise bunun tam tersi biçimde davranır. switch deyimi içerisindeki case etkinleştirildiğinde, php bir break deyimine rastlayana kadar, deyimleri çalıştırmayı sürdürür. Bir break deyimi olmadan switch, doğru olan case' yi takip eden tüm kodlarımızı çalıştırır. Bir break deyimine gelindiğinde ise, switch deyiminden sonra gelen kod satırı çalıştırılır.
Yukarıdaki örnekte "Arkadaşımdan duydum" ifadesinin altında yer alan break deyimini kaldırıp kod parçamızı yeniden çalıştırırsanız;
"Arkadaşımdan duydum Arkadaşım mesaj yolladı"
çıktıları ile karşılaşırsınız.

Aşağıdaki örnekte bu konu ile ilgili bir örnek daha veriyorum. Lütfen $cevap değişkeni değerlerini değiştirerek kendi yerel sunucunuzda denemelerinizi yapınız.

<?php
$cevap = "h";
switch ($cevap)
{
case "e":
case "E":
print "Cevabınızı EVET olarak verdiniz.";
break;

case "h":
case "H":
print "Cevabınızı HAYIR olarak verdiniz";
break;
}// Çıktımız Cevabınızı HAYIR olarak verdiniz olacaktır.
?>

Gönderen _nl2br zaman: 03:10  

0 yorum:

Yorum Gönder