49
Kod Akış Kontrol Yrd.Doç.Dr. Celal Murat KANDEMİR ESOGÜ – Eğitim Fakültesi - BÖTE twitter.com/cmkandemir

Kod Akış Kontrolü - Döngüler, Fonksiyonlar

Embed Size (px)

Citation preview

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

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" );

Koşul İfadeleri

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

� 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

� 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ı

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}?>

Dizi Değişkeni FonksiyonlarıUygulama Notları Örnekleri

44

String FonksiyonlarıUygulama Notları Örnekleri

45

Matematik FonksiyonlarıUygulama Notları Örnekleri

46

Kod Akış Kontrol

Sorular?

Ö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

Örnekler(2)

5. Tanımlanmış sabit N için N! (factorial 1*2*..*N) hesap eden programı yazınız

6. Tanımlanmış sabitler N ve K için N!*K!/(N-K)! İfadesini hesaplayan programı yazınız