Döngüler

25 Mayıs 2008 Pazar

Tekrarlanan işleri otomatikleştirmek bir programcının en sık başvurduğu yollardan biridir. Eğer bir şeyi bir kaç kez yapmamız gerekiyorsa programımızın bazı kısımlarını tekrar etmemiz için döngülerden (loop) faydalanırız. Döngüler programlama dillerinin en önemli yapılarındandır. Php' de kendimizi geliştirdikçe tekrarlanan işlemlerden sıralamalara kadar, döngülere sık sık başvuracağız. For döngüsüyle işe başlayalım,

- for döngüsü;
Yapısı:

for(ifade1; koşul; ifade2)
{
ifade3;
}

Php'deki en kısa döngülerdendir. Döngü yapısında üç tane ifade kullanılır.
- Birinci ifade döngüye ilk girildiğinde çalıştırılır. ( Burada genellikle sayacın ilk değeri ayarlanır.) Ardından koşula geçilir.
- Burada bir koşul sağlamak için girdiğimiz ifade vardır ve bu koşul, her tekrardan önce kontrol edilir. Eğer buradaki koşulun sonucunda false değer döndürülürse, tekrarlama işlemi durdurulur. Bu deyimde genellikle sayacı kontrol etmek amacıyla bir limit değeri ile şartlandırırız.
ardından ikinci ifadeye geçilir
- İkinci ifade her tekrarın sonunda bir kez çalıştırılır. (Burada ise sayacın değeri ayarlanır)
Ardından üçüncü ifadeye geçilir.
- Üçüncü ifade de her tekrarda bir kez çalıştırılır. Bu ifademiz genellikle bir kod bloğudur ve bloğun içierisinde koşulumuz true değer ürettiği sürece tekrarlanmasını istediğimiz bir işlem veya bir eylem vardır.
For döngüsünü adaha iyi anlayabilmek için aşağıdaki örnekte, 1'den 10'a kadar olan sayıları satır satır döken bir kod parçası tasarlayalım. Böyle bir kod parçası için önce ifadelerimiz ve koşulumuz tek tek düşünelim. Sayıları 1'den 10'a kadar dökeceğimiz için, ilk ifademizde sayacımızın başlangıç değerini 1, Koşul değerini ise 1'den büyük,10'a eşit olarak ayarlamamız gerekir. Başlangıç değerini 1 olarak atamamız bize döngümüz çalıştığı sürece her turda 1 adım ilerleme olanağı sağlar. İkinci ifademizde ise sayacımız sondan arttırma operatörünü kullanarak değer atamamız yeterli olacaktır. Üçüncü ifademizde ise adım adım elde ettiğimiz verileri ekrana yansıtmak gereken kod parçası olacaktır.
<?php
for ($i =1; $i <= 10; $i++) { echo "$i <br/>"; } ?> Şimdi Kod parçamızın çalışma diagramına bakalım:
Örneğimizde; döngümüze başlangıç değeri olan 1 ile girilmiş, ardından döngü için verilen şarta bakılmıştır. Döngü şartı sağlandığından kod bloğumuz çalıştırılıp ekrana o anki sayaç değeri yansıtılmıştır. Daha sonra + sayacımızın değerine bakılıp, o anki sayaç değeri bir adım arttırılmış ve dögü koşuluna bir kez daha bakılmıştır. Koşul sağlandığından, işleme false değer üretilene kadar bu biçimde aşama aşama devam edilmiş, $i olarak verdiğimiz değer 10 olduğunda alınan boolean değer false olduğundan döngüden çıkılmış ama kod bloğumuz son kez olarak işlenip son sayac değerini ekrana taşımıştır.

Aşağıdaki örnekte 0' dan 10' a kadar olan sayıların karelerini ekrana yansıtıyoruz.


<?php
for($i = 0; $i <= 10; $i++)
{
print "$i'in karesi". $i * $i. "dir <br/>";
}
?>

Bu kod parçamız Ekrana;

0'in karesi0dir
1'in karesi1dir
2'in karesi4dir
3'in karesi9dir
4'in karesi16dir
5'in karesi25dir
6'in karesi36dir
7'in karesi49dir
8'in karesi64dir
9'in karesi81dir
10'in karesi100dir
değerlerini bastıracaktır.

Bu kod parçasının çalıştırılma aşamasınd aneler olduğunu artık düşünebiliyoruz sanırım.
İlk olarak döngüye $i değişkenine girdiğimiz 0 değeri ile girilmiş, şarta bakılmış bir adım ilerlenmiş ve 0 * 0 ın değeri (0' ın karesi) ekrana yansıtılmış ve döngüye 1 adım arttırılarak devam edilmiştir.
Konuyu daha iyi kavrayabilmemiz için bir örnek daha yapalım. Örneğimizde, 1' den 5' e kadar olan sayıların toplamlarını alacak ve döngümüzün çalışma diagramına bakacağız. Bunun için yapmamız gerekeni az çok tahmin edebilirsiniz.


<?php
$topla = 0;
for($i = 1; $i <= 5; $i++)
{
$topla = $topla + $i;
}

print $topla;
?>

Kodumuz 1' den 5' e kadar olan sayıları toplayacak ve çıktı olarak 15 değerini ekrana yansıtacaktır.



Kodumuz çalıştıkça, $topla değişkenimize, sürekli olarak döngü değişkenimiz $i' nin değerini ekleyip şartın sağlanamadığı komumdaki değeri bize yansıtmış ve işini bitirmiştir.

Programlama yaparken bazen sonsuz döngülerle karşılaşırız. Ya mantıklı olmayan bir süreç işletmiş, ya da döngü değerlerini eksik bırakmış programımızı kilitlemişizdir. Aşağıdaki örnek sonsuz döngülerin nasıl oluştuğunu anlatmak bakımından önemlidir.

<?php
for(; ;)
{
print "Ben bir sonsuz döngüyüm";
}
?> // Çıktı vermesi için işlemcinizin oldukça kasması gerekmektedir.

İfadelerin ve koşulun eksik olduğu ama komut bloğunu unutmadığımız bir döngü biçimi.

Php' de döngü kullanırken verdiğiniz ifade/koşul yapısının düzgün biçimde optimize edilmiş olduğunu önemle hatırlatmak isterim. Örneğin

<?php
$dizi = array(1, 2, 3);
for ($i = 0; $i <= count($dizi); $i++)
{
print $i;
}
?>

yerine;

<?php
$dizi = array(1, 2, 3);
$say = count($dizi);
for ($i = 0; $i <= $say; $i++)
{
print $i;
}
?>

gibi bir yapı php için daha anlaşılır ve daha az kaynak tüketmek anlamına gelir.

- while döngüsü;

Php' de en basit yapıya sahip, belkide en sık kullanılan döngü tipidir. Koşula bağlı olarak koşul true (doğru) olduğu sürece çalışır. Yapısı da oldukça basittir.

while( koşul)
{
ifade..... ;
}
Döngü bir koşul belirtmekle başlar ve her tekrar edilişte, koşul kontrol edilir. Koşul false değer üretince ifade bloğu çalıştırılmayacak, ve döngü sona erecektir.

<?php $sayi = 1; while($sayi <= 5) { print "$sayi
";
$sayi++; } ?>

Örneğimizde önce başlangıç için bir sayaç yaptık. Döngünün her tekrarından önce sayacı koşulumuz için kontrol ettik, ifademizi uygulattırdık ve ve tekrarın sonucunda sayacımızı yeniledik. Kodumuzu diagram üzerinde inceleyelim;

Başlangıçta, koşulumuz $i <= 5 ifadesi ile sorgulanmış, $i değişkenimizin değeri 1 olduğundan döngüye girilmiş, kod bloğumuz çalıştırılmış, döngü içerisinde her defasında, $i değişkeni sayaç değerimiz (+) ile arttırılmıştır. Her yinelemede, kod bloğumuz çalıştırılmış, $i değişkenin değeri 6 olana kadar bu süreç devam etmiştir. $i değişkeninin değeri 6 olduğunda döngüde şarta bağlı olarak false değeri oluşturulmuş ve döngüden çıkılmıştır. Aşağıdaki örneğimizde 1' den 10' a kadar olan çift sayılar while döngüsü yardımı ile dökülmüştür. <?php
$i =1;
while($i <= 10)
{
if($i % 2 == 0)
print "$i
";

$i++;
}
?>

Örneğimizi tek sayıları ekrana yansıtmak için yeniden yapılandırınız ve kendi sunucunuzda deneyiniz.

- Do .... while döngüsü;

do while döngüsüde while döngüsü gibi koşula bağlı olarak çalışır ancak, koşul döngünün başında değil sonunda kontrol edilir. Bu nedenle, koşul ifademiz false üretse bile, döngüye en az bir kez girilir. Bunun anlamı, bir do while döngüsü içerisinde yer alan deyim veya kod bloğu, her zaman en az bir kez çalıştırılmaktadır.

Aşağıdaki kodu dikkatle inceleyiniz.

<?php
$sayi = 100;
do
{
print $sayi. "</br>";
}
while($sayi < 1);
?>

// Tarayıcımız 100 rakamını ekrana yansıtır.

Bu kod parçası, koşulun başlangıçta false olduğu ve hiç bir zaman true olamayacağı bir yapıdadır. Ama do while döngüsü ile bir kez de olsa ilk çalışmıştır.

Gönderen _nl2br zaman: 01:03  

0 yorum:

Yorum Gönder