23 Haziran 2016 Perşembe

Php'de Döngü Kavramı

Döngü Kavramı
Döngüler bir kod yada kod blokunun belirli Ģartlara göre
tekrar edilmesini sağlayan program parçalarıdır. ġöyle
düĢünelim. 1 den 100 ‗ e kadar sayıların toplamını
bulmak istiyoruz. Döngüler olmasa sırasıyla sayıları yazıp
toplayacaktık. Oysa döngüler ile bu iĢlemi çok daha
basit yapabiliriz. PHP dilinde iki tip döngü vardır. KoĢulun
durumuna göre tekrar eden While ve belirli sayıda tekrar
eden FOR döngüleri.
For Döngüsü
Bir kod satırını yada blokunu belirli sayıda tekrar eder.
<?php
for ($i = 1; $i < 100; $i = $i + 1) {
print "Sayı $i\n";
}
?>
Yukardaki örnekte 1 ile 100 arasındaki sayılar ekrana
yazdırılmaktadır. Dikat edilecek nokta ise koĢuldur. Bu
döngüle yazdırılan son sayı 99 dur.
<?php
// or dongusu iĢlemleri billi bir sayıda tekrarlar
// sayacı kendi artırıp eksilttiğinden sonsuz döngü riski
yoktur
/*for ( döngü değiĢkeni; koĢul ; artıĢ basamağı ) {
KoĢul doğru ise yapılacak iĢlere iliĢkin komutlar
} */
for ($sayac = 1; $sayac <= 7 ; $sayac++ ) {

// 1 den baĢlayarak 7 olana dek artır
print ("<font size= $sayac >");
print ("<b><p>Milli takım gittikçe
büyüyor!</b></p>");
print ("</font>");
}
?>
Yukardaki döngüde yazının büyüklüğü döngü ile birlite
artacaktır ve 7 olunca döngü sona erecektir. For döngüsü
sayıyı kendi artırdığından normal Ģartlar altında While
döngülerinde sonsuz döngü riskini barındırmaz. Ancak
kullanıcı adeta sabotaj yapar gibidöngünün içinde iken
döngü sabitine çıkıĢ değerinden küçük bir değer atarsa
döngü çıkıĢ değerine hiç gelemez ve sonsuz döngüye
girer. AĢağıdaki örneği deneyecek kadar gözünüz kara
ise en azından önce çalıĢmalarınızı kaydedin.
<?php
for ($sayac = 1; $sayac <= 7 ; $sayac++ ) {
// 1 den baĢlayarak 7 olana dek artır
print ("<font size= $sayac >");
print ("<b>Milli takım gittikçe
büyüyor!</b><br>");
print ("</font>");
// $sayac=3; // bu satır açıklama satırı
olmasaydı sonsuz döngüye girecekti.
}
?>
While Do Döngüsü
While döngüsü for döngüsünden farklı olarak önce bir
koĢulu kontrol edecek koĢul doğru ise döngü komutlarını
çalıĢtıracaktır. Örneğin ;
<?php
$sayac = 1;
while ( $sayac <= 7 ) {
print ("<font size= $sayac >");
print ("<b>Milli takım gittikçe
büyüyor!</b><br>");
print ("</font>");
$sayac ++; // bu iĢlem yapılmazsa program
sonsuz döngüye girer.
} ?>
Yukardaki gibi döngüler kodlanırken dikkat edilmesi
gereken noktalar vardır. Bunlardan en önemlisi ise koĢul
bir sayaç ise artırma iĢlemin unutulmamasıdır. Örneğin
yukarda döngüde sayaç değiĢkenini artırmayı unutmuĢ
olsaydık, sayaç asla 7 olamayacak ve program sonsuz
döngüye girecekti. Döngü içinde yanlıĢlıkla sayaca
koĢuldan büyük değer atasaydık, program döngüden o
anda çıkacaktı.
Do While Döngüsü
Do While döngüsü While döngüsünün tersi mantıkla
çalıĢır. Önce döngü blokunu çalıĢtırır daha sonra ise Ģartı
kontrol eder.
<?php
$sayac = 1;
do {
print ("<font size= $sayac >");
print ("<b>Milli takım gittikçe
büyüyor!</b><br>");
print ("</font>");
$sayac ++; // bu iĢlem olmazsa kodumuz sonsuz
döngüye girer
}
while ( $sayac <= 7 ) ;
?>
Yukardaki döngüyü incelediğinizde Ģunu göreceksiniz.
Sayaç değiĢkenine ilk atanan değer 100 olsa bile döngü
1 defa çalıĢıp daha sonra duracaktır. Do While
döngüsünün çalıĢma prensibi budur. Do while
döngüsünde While satırının sonunda noktalı virgül
olduğuna ―;‖ dikkat etmelisiniz. Aksi taktirde derleme
hatası alırsınız.
While ve Do While döngüleri özellikle dosyalarla ve
veritabanı tabloları ile iĢlem yaparken faydalıdır.
Örneğin, ―oku, iĢle, dosya sonuna gelince dur‖ yada
―dosya sonu değilse, oku, iĢle‖ Ģeklinde kullanılırlar ve
metin dosyalarının yada veritabanı tablolarının baĢından
sonuna iĢlem yapılacağı durumlarda iĢe yararlar.
For .. Each Döngüsü
Bir dizi yada küme değiĢkeninin sahip olduğu indisler
boyunca döngü kurulmasını sağlar. Örneğin ;
<?php
// for each dizi elemanları boyunca tekrarlar aslında
dizideki sayıyı bulup for ilede bu iĢlemi yapabiliriz
$adlar = array (
1=>"Ali",
2=>"Ömer",
3=>"Mehmet",
4=>"ihsan",
5=>"Ahmet",
6=>"Ġbrahim");
foreach ($adlar as $deger)
{echo $deger . "<br>";}
?>
Burada döngü dizinin elemanlarını sırasıyla ekrana
yazacaktır. Eğer isteseydik count() fonksiyonu ile dizinin
eleman sayısını bulup bu sayı kadar çalıĢacak for
döngüsü de kurabilirdik
<?php
// for each dizi elemanları boyunca tekrarlar Ģüphesiz
dizideki sayıyı bulup for ilede bu iĢelmi yapabiliriz
$adlar = array (
1=>"Ali",
2=>"Ömer",
3=>"Mehmet",
4=>"ihsan",
5=>"Ahmet",
6=>"Ġbrahim");
for ($i=1;$i <=count($adlar);++$i)
{echo $adlar[$i] . "<br>";}
?>
Döngüyü Kırmak için Break Komutu
Bazen durumun gerektirdiği üzere döngünün çalıĢmasını
kırmak gerekir. Bu durumlarda break komutu
kullanılmalıdır. Break komutunu daha önce switch
blokundada incelemiĢtik. Buradaki iĢlevi ise döngünün
artık tekrarlanmadan kırılmasıdır. Döngü kırılınca,
program döngünün bir sonraki satırından devam eder.
<?php
for ($sayac = 1; $sayac <= 100 ; $sayac++ ) {
// 1 den baĢlayarak 7 olana dek artır
print ("<font size= $sayac >");
print ("<b><p>Fenerbahçe gittikçe
büyüyor!</b></p>");
print ("</font>");
if ($sayac== 7){echo "sayac Ģu an 7 bu dongu
burada kırılacak"; break;}
// burada sayı 7 olunca dongu kırılacak kısaca
sayac asla 8 olamayacak
}
?>
Yukardaki döngüde döngü sayacına göre yazı büyüklüğü
verilmektedir. Ancak bu HTML de maksimum 7
olduğundan 7 olduğundan döngü kırılması sağlanmıĢtır.
Aslında döngüyü sadece 7 ye kadar da kurabilirdik ama
burada break komutunun iĢlevini görmek için bu Ģekilde
ayarlandı.
Yine aynı Ģekilde bir döngü boyunca kullanıcıdan bilgi
sorulduğunu düĢünün örneğin 200 defa. Kullanıcı sıkıldığı
anda belirli bir sayı girip döngüyü kırabilmelidir.
Döngüyü Devam Ettirme : Continue
Bazı durumlarda döngüyü kırmak yerine bir sonraki
duruma geçmek gerekir. Örneğin Ģöyle bir problem
düĢünün. Sırayla notları alacağız ve notlar 100‘ den
büyükse iĢlem yapmadan bir sonraki iĢleme geçeceğiz.
<?php
for ($sayi=1; $sayi <= ogrenci sayısı; $sayi++ ) {
if ( $puan >100 ) continue; // 100 den buyuk
not olmaz. Bir sonraki notu soracak
print ("$sayi,$puan");
print ("<br>");
}
?>
Döngü Ġçinde Döngü Kullanımı
Kodlamaya dikkat edilirse döngüler birbiri içinde
kullanılabilir. Dikkat edilmesi gereken konu gereksiz
iĢlemlerin döngü içine sokulmamasıdır. Ayrıca bu
döngüleri çinde Break komutunun kullanımda biraz daha
detaylıdır. Break burada kullanılırsa sadece en yakındaki
göngüyü kırar.
for ($i = 1; $i < 3; $i = $i + 1) {
for ($j = 1; $j < 4; $j = $j + 1) {
for ($k = 1; $k < 3; $k = $k + 1) {
print "I: $i, J: $j, K: $k\n";
}
}
}
Ekran görüntüsü Ģöyle olacaktır.
I:1,J:1,K:1
I:1,J:1,K:2
I:1,J:2,K:1
I:1,J:2,K:2
I:2,J:1,K:1
I:2,J:1,K:2
I:2,J:2,K:1
I:2,J:2,K:2
Yukardaki örneğe break komutunu eklersek;
for ($i = 1; $i < 3; $i = $i + 1) {
for ($j = 1; $j < 4; $j = $j + 1) {
for ($k = 1; $k < 3; $k = $k + 1) {
print "I: $i, J: $j, K: $k\n";
break;
}
}
}
Ekran çıktısı Ģöyle olacaktır:
I:1,J:1,K:1
I:1,J:2,K:1
I:2,J:1,K:1
I:2,J:2,K:1
Döngü ve Kontrol Bloklarında PHP ve HTML
Ġç içe Kullanım
PHP dili bizlere ekrana çıktı verme imkanı tanımıĢtır
ancak bunu gereksiz yere kullanmak sadece balyozla
sinek avlamaya benzer. Örneği incelediğimizde durum
daha iyi anlaĢılacaktır;
<?php
if ($a == $b) {
print "Devam edip giden kod satırları ";
print "Devam edip giden kod satırları ";
print "Devam edip giden kod satırları ";
...[devam]...
print "Devam edip giden kod satırları ";
print "Devam edip giden kod satırları ";
print "Devam edip giden kod satırları ";
}
?>
Burada yaptığımız hata Ģu; madem PHP ve HTML iç içe
yazılabiliyor o halde koĢul sağlandığından çalıĢan print
komutları yerine koĢul sağlandığından PHP blokundan
çıkıp HTML diline geçip ekrana yazıları öyle yazdırsak
nasıl olur ?
<?php
if ($a == $b) {
?>
Devam edip giden kod satırları
Devam edip giden kod satırları
Devam edip giden kod satırları
[….devam…..]
Devam edip giden kod satırları
Devam edip giden kod satırları
Devam edip giden kod satırları
<?php
}
?>
ġimdi hem kodumuz aynı iĢi yapıyor hem kod daha
okunur halde üstelikte PHP gereksiz yere ekrana Ģunu
yazdırağım diye uğraĢmıyor.

Hiç yorum yok:

Yorum Gönder