28 Mayıs 2013 Salı

döngü ve koşullar

1. Koşullar
ActionScript 3.0’te program akışını denetlemek için kullanabileceğiniz if…else , if..else if ve switch olmak üzere üç temel koşul deyimi bulunmaktadır.
if..else
if..else deyimi, bir koşulu test etmenizi sağlar. Koşul sağlanırsa bir kod bloğu sağlanmazsa alternatif bir kod bloğu çalışır. Örneğin, aşağıdaki kod, j değerinin 20 değerini aşıp aşmadığını test eder, aşıyorsa bir trace() işlevi oluşturur veya aşmıyorsa farklı bir trace() işlevi oluşturur:
var j:int;
if (j > 20)
{
trace("j, yirmiden büyük.");
}
else
{
trace("j, yirmiye küçük eşit.");
}
Alternatif kod bloğu çalıştırmak istemiyorsanız, if deyimini else deyimi olmadan da kullanabilirsiniz:
var i:int=30
if (i > 20)
{
trace("i, yirmiden büyüktür");
}
if..else if
if..else if deyimi birden fazla koşulu test etmenizi sağlar. Örneğin, aşağıdaki kod yalnızca i değerinin 20 değerini aşıp aşmadığını değil, aynı zamanda i değerinin negatif olup olmadığını da test eder:
if (i > 20)
{
trace("i is > 20");
}
else if (i < 0)
{
trace("i, negatif");
}
Bir if veya else deyiminden sonra yalnızca tek bir deyim geliyorsa, deyimin ayraç içine alınması gerekmez. Örneğin, aşağıdaki kod ayraç kullanılmayabilir, kod çalışacaktır. Ancak ayraç bulunmayan bir koşul deyimine daha sonra if deyimleri eklenirse beklenmedik davranışlar oluşabileceğinden her zaman ayraç kullanmanız önerilir.
if (i > 0)
trace("i, pozitif");
else if (i < 0)
trace("i, negatif");
else
trace("i, sıfıra eşit");
switch
Aynı koşul ifadesine bağlı çok sayıda durum söz konusu ile iç içe uzun if..else if deyimleri yerine switch tercih edilir. uzun if..else if deyimleri değimlerine göre daha kolay okunabilir. switch deyimi, bir Boolean değerinin koşulunu test etmek yerine, hangi kod bloğunun çalıştırılacağını belirlemek için sayı veya string (dize) olan bir değer kullanır. Kod blokları bir case deyimiyle başlar ve bir break deyimiyle sona erer. Örneğin, aşağıdaki switch deyimi, Date.getDay() yönteminin döndürdüğü gün sayısını esas alarak haftanın gününü yazdırır:
var tarih:Date = new Date();
var gun:uint = tarih.getDay(); // . getDay() haftanın kaçıncı günü olduğunu bildirir
switch (gun)
{
case 0 :
trace("Pazar");
break;
case 1 :
trace("Pzartesi");
break;
case 2 :
trace("Salı");
break;
case 3 :
trace("Çarşamba");
break;
case 4 :
trace("Perşembe");
break;
case 5 :
trace("Cuma");
break;
case 6 :
trace("Cumatesi");
break;
default :
trace("Aralık dışı");
break;
}
2. Do ngu ler
Döngü deyimleri, bir değerler veya değişkenler dizisi kullanarak art arda belirli bir kod bloğu çalıştırmanıza olanak sağlar. Actinscript 3’de döngü ifadesi olarak for, for.. in, for each..in, while ve do..while kullanılır.
for
for döngüsü, belirli bir değer aralığı için bir değişkeni yineleyerek belirli bir kod satırının tekrar tekrar çalıştırılmasını sağlar. for deyiminde üç ifade sağlaması gerekir: başlangıç değerini belirleyen bir değişken, döngünün ne zaman sona ereceğini belirleyen bir koşul deyimi ve her döngüyle değişkenin değerini değiştiren bir ifade.
Örneğin, aşağıdaki kod beş defa döngü sağlar. i değişkeninin değeri 0'da başlar ve 4'te sona erer, çıktı da her biri kendi satırında olan 0 ile 4 arasındaki sayılar olur.
var i:int;
for (i = 0; i < 5; i++)
{
trace(i);
}
//Output
// 0
// 1
// 2
// 3
// 4
for..in
for..in döngüsü, bir dizi veya object türündeki bir nesneyle işlem yaparken kullanılır. Örneğin bir dizinin içindeki değerlerle işlem yapmak için aşağıdaki kod parçası kullanılır.
var yeniDizi:Array = ["bir","iki","üç"];
for (var k:String in yeniDizi)
{
trace(yeniDizi[k]);
}
// Output:
// bir
// iki
// üç
Object nesnesi içinde istenilen türde bilgi saklayabilen nesnelerdir. Object nesnesi iki şekilde tanımlana bilir:
var yeniNesne:Object=new Object();
yeniNesne.adet = 5;
yeniNesne.renk = "mavi";
yeniNesne.no = 1234;
ya da
var yeniNesne:Object={adet:5, renk:"mavi", no:1234};
for..in Örneği
var yeniNesne:Object={adet:5, renk:"mavi", no:1234};
for (var i:String in yeniNesne)
{
trace(yeniNesne[i]);
}
// output:
// 1234
// mavi
// 5
for..in döngüsünde nesne özellikleri belirli bir sırada tutulmaz, bu nedende özellikler her çalışmada farklı sıralarda listelenebilir.
Bir nesne, kullanıcı tanımlı sınıfın bir örneğiyse, sınıf dinamik bir sınıf olmadığı sürece nesnenin özelliklerini yineleyemezsiniz. Dinamik sınıf örnekleriyle de, yalnızca dinamik olarak eklenen özellikleri yineleyebilirsiniz.
for each..in
for each..in döngüsünün, for..in döngüsünden iki farkı bulunmaktadır. İlki for each..in deyiminde döngü içerisinde oluşturulan değişkenin veri tipinin belirtilmemesidir, for..in döngüsünde ise belirtilmek zorundadır. Eğer bir dizi veya object nesnesinin içindeki verilerin tipi bilinmiyorsa for each..in tercih edilmelidir. İkincisi ise for each.. in özelliğin adı yerine özelliğin kendisi tarafından tutulan değeri döndürür. Aşağıdaki örneği inceleyiniz.
var yeniNesne:Object={ad: "Ozlem", soyad:"Ozan", no:1234};
for each (var i in yeniNesne)
{
trace(i);
}
// Output:
// Ozlem
// Ozan
// 1234
/* i değişkenine herhangi bir veri türü atanmaz.*/
/* özelliğin tarafından tutulan değeri döndürür*/
for (var i:String in yeniNesne)
{
trace(i);
}
// Output:
// ad
// soyad
// no
/* i değişkenine veri türü atanmak zorundadır.*/
/* özelliğin adını döndürür*/
/*Eğer object nesnesinin her bir özelliğine ait değerler for..in ile alınmak isteniyorsa yeniNesne[i] kullanılmalıdır. */
for (var i:String in yeniNesne)
{
trace(yeniNesne[i]);
}
// Output:
// Ozlem
// Ozan
// 1234
Örnek 2:
var dizi:Array = [1,"araba",2,"ev"];
for each (var icerik in dizi)
{ trace(icerik);
}
// Output:
// 1
// araba
// 2
// ev
Bir nesne mühürlenmiş bir sınıf örneğiyse, o nesnenin özelliklerini bu döngü içerisinde kullanılamaz. Dinamik sınıf örneklerinin sabit özellikleri de bu döngü içerisinde kullanılamaz.
while
while döngüsü, koşul true olduğu sürece yinelenen if deyimine benzer. Ancak if deyiminde ifade true ise kod bir kere çalışır, while da ise true olduğu sürece çalışır. Örnek 1'de output ekranında 5 yazarken, örnek 2 sonsuz döngüye girer.
Örnek 1
var i:int=5
if (i==5)
{trace (i)}
// Output: 5
Örnek 2
var i:int=5
while (i==5)
{trace (i)}
/* Sonsuz döngüye girdiğinden Output: Error #1502: A script has executed for longer than the default timeout period of 15 seconds. at Untitled_fla::MainTimeline/frame1() */
Örneğin, aşağıdaki kod, for döngüsü örneğiyle aynı çıktıyı oluşturur:
var sayac:int = 0;
while (sayac < 5)
{
trace(sayac);
sayac ++;
}
// output
// 0
// 1
// 2
// 3
// 4
for döngüsü yerine while döngüsü kullanılmasının bir dezavantajı, sonsuz döngülerin while döngüleriyle daha kolay yazılmasıdır. Sayac değişkenini artıran ifadeyi çıkarırsanız, for döngüsü örneği derleme yapmaz ancak bu adımı çıkarırsanız while döngüsü örneği derleme yapar. i değerini artıran ifade olmadan döngü sonsuz döngü olur.
do..while
do..while döngüsü, kod bloğu çalıştırıldıktan sonra koşul denetlendiğinden, kod bloğunun en az bir defa çalıştırılmasını garantileyen bir while döngüsüdür.
do..while döngüsü, kod bloğu çalıştırıldıktan sonra koşul denetlemektedir. Dolayısıyla kod bloğu en az bir defa çalışır, sonra koşul denetlenir. Koşul sağlanıyorsa kod tekrarlanmaya devam eder, sağlanmıyorsa tekrarlanmaz. Aşağıdaki kod, koşul karşılanmasa da çıktı oluşturan basit do..while döngüsü örneğini göstermektedir:
Örnek 1
var i:int = 6;
do
{
trace(i);
i++;
} while (i < 4);
// output
// 6
Örnek 2
var i:int = 0;
do
{
trace(i);
i++;
} while (i < 4);
// output
// 0
// 1
// 2
// 3
Konu Sonu Soruları
Koşullar ve Döngüler
1. switch ve if..else if arasındaki temel fark nedir?
a. if..else if break değerini kullanırken switch case değerini kullanır.
b. if..else if ile sadece bir koşul switch ile birden fazla koşul test edilir,
c. switch sadece Boolean değerlerle çalışır, if..else if her değerle çalışır.
d. if..else if sadece Boolean değerlerle çalışır, switch her değerle çalışır.
2. Aşağıdakilerden hangisinin sonsuz döngüye girme olasılığı daha yüksektir?
a. for..in
b. for each..in
c. for
d. while
3. Aşağıdaki kod bloğunun output ekranındaki çıktısı nedir?
var i:int = 10;
do
{
trace(i);
i++;
} while (i < = 4);
Bir cevap seçin.
a. 3
b. 1, 2, 3, 4
c. 4
d. 5
4. İçerisinde hangi tür veri barındırdığını bilmediğimiz bir dizi ile döngü oluşturmak istiyouruz. Aşağıdakilerden hangisini kullanmalıyız?
a. for each..in
b. for..in
c. while
d. for
5. Aşağıdaki kod parçası çalıştığında output ekranında aşağıdakilerden hangisi yazar.
var yeniNesne:Object={ad: "Ozlem"};
for (var i:String in yeniNesne)
{
trace(i);
}
Bir cevap seçin.
a. ad:Ozlem
b. Ozlem
c. ad: "Ozlem"
d. ad

Hiç yorum yok:

Yorum Gönder