kod akış kontrolü - döngüler, fonksiyonlar
TRANSCRIPT
Kod Akış Kontrol
Yrd.Doç.Dr. Celal Murat KANDEMİRESOGÜ – Eğitim Fakültesi - BÖTEtwitter.com/cmkandemir
Contents
1. Koşul cümleleri (Conditional statements)
2. Döngüler (Loops)
3. Fonksiyonlar ve Geri Dönüş Değerleri
4. Include ve require
5. Değişken kapsam alanı
Koşul İfadeleri - if� if yapısı eğer belli bir koşul sağlanırsa kodun
çalıştırılmasını sağlar
� Not: atamalar atanmış bir değer olarak geri döner
$a = 5; $b = 7;if ($a > $b)
echo "A büyüktür B";
if ($a % 2) {echo "A is odd";$b = $a % 2;echo "A%2 is :".$b;
}
if ($b = $a%2)echo "A tek - A%2 is :".$b;
Koşul İfadeleri - if� if yapısı eğer belli bir koşul sağlanırsa kodun
çalıştırılmasını sağlar
� Not: atamalar atanmış bir değer olarak geri döner
$a = 5; $b = 7;if ($a > $b)
echo "A büyüktür B";
if ($a % 2) {echo "A is odd";$b = $a % 2;echo "A%2 is :".$b;
}
if ($b = $a%2)echo "A tek - A%2 is :".$b;
Boolean ifade
Koşul İfadeleri - if� if yapısı eğer belli bir koşul sağlanırsa kodun
çalıştırılmasını sağlar
� Not: atamalar atanmış bir değer olarak geri döner
$a = 5; $b = 7;if ($a > $b)
echo "A büyüktür B";
if ($a % 2) {echo "A is odd";$b = $a % 2;echo "A%2 is :".$b;
}
if ($b = $a%2)echo "A tek - A%2 is :".$b;
Eğer koşul doğru ise
çalıştırılacak kod bloğu
Parantezleri unutmayın!
If - else
� if-else yapı if yapının genişletilmiş şeklidir ve şartla sağlanırsa bir kodu sağlanmaz ise diğerini çalıştırmanıza imkan sağlar.
$a = 5; $b = 7;if ($a > $b)
echo "A büyüktür B";else
echo "B büyük eşit A";
if - elseif
� if-else yapının genişletilmiş biçimidir
� else gövdeye yeni koşullar eklemek için kullanılır
� Çoklu elseif ifadeleriniz olabilir.
if ($a > $b)echo "A büyüktür B";
elseif ($a == $b)echo "A eşittir B";
elseecho "B büyüktür A";
switch
� switch yapı kontrol edilen değişken değerine bağlı olarak farklı kod bölümlerinin çalıştırılmasını sağlar.
� Çok sayıda if kullanmakla aynıdır.
� switch gövdesi "case" cümleleri içerir
� Yorumlayıcı değişken değeri ile eşleşen kod cümlesini bulur ve çalıştırır
switch ($a) {case 0: echo "A 0’dır"; break;case 1: echo "A 1’dir"; break;
}
switch (2)
� else benzer şekilde default case işleminiz olabilir
� Eğer youmlayıcı herhangi bir case değerini bulmazsa default seçeneği yürütür
� default case zorunlu değildir
switch ($a) {case 0: echo "A is 0"; break;case 1: echo "A is 1"; break;default:
echo "A is … something else";break;
}
switch(3)
� Yorumlayıcı bulduğu case durumu için gerekli kod cümlelerini çalıştırdıktan sonra bir sonraki case satırına gider switch bloğundan çıkmaz.
� Yukarıdaki örnek "A 0’dır A 1’dir" ekran çıktısı verir.
� Çözüm gerekli olan yerlere break eklenmesidir
� default case için de aynı durum söz konusudur (eğer son durum değilse!)
$a = 0;switch ($a) {
case 0: echo "A 0’dır"; case 1: echo "A 1’dir";
}
switch(4)
� switch davranışına bağlı olarak boş case durumları da kullanılabilir
� break konulmaz, böylelikle yorumlayıcı bir sonraki satırdan devam edebilir.
� Tek bir kod ile birden fazla değeri birleştirmek amacıyla kullanılabilir.
$a = 0;switch ($a) {
case 0: echo "A 0’dır"; break;case 1: case 2: echo "A 1 veya 2’dir"; break;
}
switch(5)
�Herhangi bir skaler tip değişken kullanılabilir(string, number, boolean, etc)
switch ($name) {case "Dimitar": echo 1; break;case "Svetlin":case "Nakov" : echo 2; break;case false : echo "İsimsiz"; break;default : echo "?!"; break;
}
Üçlü Operatör (Ternary Operator)
� if-else yapının kısa şeklidir
� Koşula bağlı olarak sadece tek bir değer geri döndürmek amacıyla kullanılabilir.
� Söz dizimi:
� Aşağıdaki şekilde kullanılamaz:
echo ($a<$b ? "a küçük" : "b küçük");echo ($a>$b ? "a" : "b")." büyüktür";$b = ($a % 2 ? 17 : 18);
<condition>?<value if true>:<value if false>
($a > 17 ? echo "a" : echo "b" );
whileYapısı
� PHP, C stili while döngüsünü destekler
� Koşul sağlanana kadar gövdede bulunan kod parçası
çalıştırılır
� Gövde bir veya fazla kod satırından oluşabilir
� Eğer birden fazla kod satırı var ise eliptik parantez içine alınmalıdır
� Koşul ifadesi boolean değişken tipinde olmalıdır.
$a = 1;while ($a < 100) {
$a ++;echo $a;
}
ifade
gövde
do… whileYapı
� do-while yapı while-do yapıya benzer
� Koşul ifade çalıştırıldıktan sonra kontrol edilir!
� Gövdede bulunan kod en az bir kez çalışır!
$a = 1;do {
$a ++;echo $a;
} while ($a < 100);// this will produce 2 3 4 … 100// the while cycle would output 2 3 4 … 99
ifade
gövde
for Döngüsü
� PHP, C stili döngüyü destekler
� for döngüsü başlatma, tekrarlanma ve sonlanma koşul ifadelerinden oluşur� Hiçbiri zorunlu değil� Her ifade virgülle ayrılmış ifadelerden oluşur
for ($i = 0; $i < 10; $i++)echo $i;
for ($i = 0, $j = 10; ; $i++, $j--)if ($j > $i)
echo $i; else break;
for Döngüsü
� PHP, C stili döngüyü destekler
� for döngüsü başlatma, tekrarlanma ve sonlanma koşul ifadelerinden oluşur� Hiçbiri zorunlu değil� Her ifade virgülle ayrılmış ifadelerden oluşur
for ($i = 0; $i < 10; $i++)echo $i;
for ($i = 0, $j = 10; ; $i++, $j--)if ($j > $i)
echo $i; else break;
başlangıç
for Döngüsü
� PHP, C stili döngüyü destekler
� for döngüsü başlatma, tekrarlanma ve sonlanma koşul ifadelerinden oluşur� Hiçbiri zorunlu değil� Her ifade virgülle ayrılmış ifadelerden oluşur
for ($i = 0; $i < 10; $i++)echo $i;
for ($i = 0, $j = 10; ; $i++, $j--)if ($j > $i)
echo $i; else break;
son koşulu
for Döngüsü
� PHP, C stili döngüyü destekler
� for döngüsü başlatma, tekrarlanma ve sonlanma koşul ifadelerinden oluşur� Hiçbiri zorunlu değil� Her ifade virgülle ayrılmış ifadelerden oluşur
for ($i = 0; $i < 10; $i++)echo $i;
for ($i = 0, $j = 10; ; $i++, $j--)if ($j > $i)
echo $i; else break;
tekrarlanma
for Döngüsü
� PHP, C stili döngüyü destekler
� for döngüsü başlatma, tekrarlanma ve sonlanma koşul ifadelerinden oluşur� Hiçbiri zorunlu değil� Her ifade virgülle ayrılmış ifadelerden oluşur
for ($i = 0; $i < 10; $i++)echo $i;
for ($i = 0, $j = 10; ; $i++, $j--)if ($j > $i)
echo $i; else break;
gövde
foreach
� Foreach diziler üzerinde tekrarlı işlemleri gerçekleştirmek amacıyla kullanılır.
� Dizideki her eleman için gövdede bulunan kod çalıştırılır.
� $value değişkenine dizide o an üzerinde
çalışılan eleman değeri atanacaktır.
$arr = array (1,1,2,3,5,8);foreach ($arr as $value)
echo $value;
foreach ve İlişkisel Diziler
� Foreach ikinci kullanım şekli
� Dizideki değere karşılık gelen anahtara erişilmesini sağlar.
$arr = array ("one" => 1, "two" => 2);foreach ($arr as $key => $value)
echo $key." => ".$value;
break ve continue
�Döngüden break komutu ile çıkılabilir
� Bir sonraki döngüye geçmek için ise continue komutu kullanılır
$i = 0;while (true) {
$i ++;if ($i == 10) break; // döngüden çıkif ($i%2 == 0) continue; // sonraki tekrarecho $i;
}// ekran çıktısı 1 3 5 7 9
Fonksiyonlar
� Fonksiyonlar, tekil bir isim altında bir araya getirilmiş koda satırı kümeleridir.
� function kelimesi ile bildirim yapılır
� Parametre alabilir ve değer dönebilir
� Kodun organize edilmesine ve tekrar kullanılabilmesine olanak sağlar
� Echo, print ve diğerleri dahili fonksiyonlardır
function sum ($a, $b) {return $a + $b;
} echo sum(5,7); // 12 ekran çıktısı üretir
Fonksiyonlar(2)
� Fonksiyon ismi tekil (benzersiz) olmalı
� Sınırsız sayıda argüman alabilir
� Fonksiyon isminden sonra parantez için tanımlanır
� return ifadesi ile değer geri döndürebilir
� Tek parametre kabul der, geri dönüş değeri
Fonksiyon Parametreleri� Fonksiyon parametreleri için ön tanımlı değerlere
sahip olabilir
� Kullanılışını kolaylaştırır
� Varsayılan değer ,sabit ifade olmalıdır
� Fonkisyon bildiriminde varsayılan olarak ayarlanmış argümanlar, sağ taraftadır!
function max ($a, $b, $strict = true) {if (strict)
return ($a > $b);else
return ($a >= $b);} echo max(3,3,false);echo max(4,3,true);echo max(3,3); // we can omit 3rd parameter
Fonksiyon Parametreleri(2)
� Varsayılan olarak PHP argümanları fonksiyonlara değer olarak geçirir.
� Anlamı fonksiyondaki argüman değeri değişimi, fonksiyon sonlandıktan sonra etkilemeyecektir.
� Argümana & ön takısı eklenerek argümanların referans ile geçirilmesi sağlanır
function double (&$a) {$a *= 2;
}$b = 7;double ($b);echo $b; // 14 geri döner;
Fonksiyon Parametreleri (3)
� PHP supports variable-length function parameters
� Fonksiyona herhangi sayıda argüman geçirilebilir.
� Fonksiyon parametreleri func_num_args() ve func_get_arg() ile okunabilir
function sum(){
$res = 0;
for ($i=0, $n = func_num_args(); $i < $n; $i++)
$res += func_get_arg ($i);
return $res;
}
echo sum (4,5,6);
Fonksiyon Geri Dönüş Değeri
� Fonksiyonlar return kelimesiyle değer geri
döndürebilirler.
� Tek argüman alırlar-geri dönecek değer
� Fonkisyondan çıkar
� Çok değer geri dönülecekse diziler kullanılmalıdır
� Fonksiyon değer geri döndürmek zorunda değildir
function foo ($a) {return true;// aşağıdaki kod çalıştırılmazecho $a + 1;
}
Fonksiyon Geri Dönüş Değeri(2)
� Çok değer geri dönmek için sabit uzunluklu diziler ve list kullanılır
� list ifadesi değişkenlere çoklu dizi elemanları atar
� array gibi bir fonksiyon değildir
� Sadece sayısal diziler için çalışır ve indisi sıfıdan
başlar
function small_numbers () {return array (0,1,2);
}list ($a, $b, $c) = small_numbers();
Değişken Fonksiyonları
� PHP değişken fonksiyonları destekler
� Eğer değişken ismine parantez eklenirse, derleyici fonksiyonu bulmaya çalışır.
� echo, print vb. bazı dahili fonksiyonlarda çalışmaz
function foo () {echo "Bu bir foo";
}$a = 'foo';$a(); // foo fonksiyonu çağrılır
Fonksiyonlar İle İlgili Bazı Notlar
� Fonksiyonun varlığı kontrol edilebilir
� function_exists($name)
� Cross-platform scriptler yaratmak için kullanışlıdır
� İç içe fonksiyonlar tanımlanabilir
� Dış fonksiyon çağrılmadıkça kullanılamazlar
� Fonksiyonlar şarta bağlı tanımlanabilir
� Koşula bağlı olarak fonksiyon tanımlanır veya tanımlanmaz
Include ve Require
� include ve require ifadeleri bir dosya eklemek ve değerlendirir
� Kodu bölmek, birleştirmek ve tekrar kullanmak için uygundur
� Her ikisi de tek parametre alır – dosya adı
� Eğer dosya bulunamazsa include warningüretirken , require fatal error üretir.
� Dosya herhangi bir uzantıda olabilir
require "header.php";echo "body burada yazılır";require "footer.php";
include_once ve require_once
� include_once ve require_once, include ve require ifadelerinin farklı formudur.
� include ve require ile bir dosya bir çok kez include edilir
� include_once ve require_once eğer dosya zaten include edildiyse, hiçbir şey olmaz
� Örneğin, bir dosya içinde fonksiyonu tanımladıysanız, çift include "Aynı İsimle Fonksiyon hali hazırda vardır hatası üretir.
Değişken Etki Alanı
� Fonksiyon içinde bildirimi yapılmış değişkenler fonksiyondan çıkana dek vardırlar
� include/require ile eklenen dosyalardeğişken etki alanını miras alırr
� $_GET, $_POST, $_SERVER ve diğer tümleşik (built-in) değişkenler globaldir.
� Kod içinde herhangi bir yerden erişilebilir.
� Fonksiyonun dışında tanımlanan değişkenler içinde erişilebilir değildir.
Global Anahtar Kelimesi
� Fonksiyonun dışında tanımlanan değişkenler içinde erişilebilir değil.
� global olarak tanımlanmalı ya da global ifadesiyle birlikte kullanılmalıdır.
$a = "test";function $foo () {
echo $a; // ekran çıktısı vermez}
$a = "test";function $foo () {
global $a;echo $a; // "test« çıktısı üretir;
}
Döngüler ve Değişken Etki Alanı
�Döngü içinde tanımlı değişkenler, döngü sonrası erişilebilir değildir.
� Örnekte dizi döngüden önce tanımlanmalıdır
for ($i = 0; $i < 5; $i++) {$arr[] = $i;
}print_r ($arr); // çıktı oluşmaz
$arr = array();for ($i = 0; $i < 5; $i++) {
$arr[] = $i;}print_r ($arr); // bu kez çalışır
Parantezler Hakkında Notlar
� PHP kod HTML içine gömülebildiği gibi, HTML kod da PHP içene gömülebilir.
� echo "Hello John!"; yazmakla
eşdeğerdir.
� uzun metinler için oldukça kullanışlıdır
<?phpif ($name == "John") {?>Merhaba John!<?php}?>
Örnekler
1. 1’den 50’ye sayıları yazan program yazınız.2. 1 ve 50 arasındaki 5 ve 7’ye bölünemeyen
sayıları yazınız3. Write a program that prints HTML table with
N columns and N rows with the numbers 1, 2, 3, ... in its cells for a given N, defined as a constant
4. İndisli dizide minimal bileşeni bulan program kodunu yazınız