Statements

Kategori: Javascript , 01 Kasım 2019 , JanFranco


Bu yazımda statement'ları (ifadeleri) göreceğiz. Kapsayacağımız konular döngüler, şartlar, deklarasyonlar vs. İlk olarak var ifadesi ile başlayalım. var statement ile değişken tanımlayabiliriz:


var foo;
foo = 'abc';

var x = 123, y, z;
Döngülere giriş yapmadan önce etiket yani label kavramından bahsedeyim. Etiketler ile kolonlara isim vererek kolonları özelleştirebiliriz. Bu ne işimize yarayacak diyorsanız, iç içe döngüde, içteki döngünü herhangi bir adımında dış döngüyü bitirebiliriz. Döngüler ile ilgili diğer kavramlar: break ve continue. break ifadesi ile bir döngüyü bitirebiliriz. continue ifadesi ile herhangi bir iteration'ı adımı atlayabiliriz. Tek tek döngüleri incelemeden önce label örneği vereyim:


function find_even_number(arr) {
    loop: {
        for (var i=0; i<arr.length; i++) {
            if (arr[i] % 2 === 0) {
                console.log(arr[i]);
                break loop;
            }
        }      
        console.log('No even number');
    }
    console.log('Done');
}
Burada for döngüsünü bir sütunun içine aldık ve sütuna loop adını verdik. Eğer döngüde çift sayı bulunursa, o sayı bastırılacak ve sütun veya blok diyebiliriz, komple sonlanacak. Böylece 'No even number' yazısı asla basılmayacak. Eğer döngüde çift sayı bulunamazsa 'No even number' konsola yazılacak ve blok sonlanacak. Artık döngüleri görebiliriz, ilk olarak while döngüsü ile başlayalım:


var arr = ['a', 'b', 'c'];
while (arr.length > 0) {
    console.log(arr.shift());
}

>>

a
b
c
Burada while ifadesini kullandık ve ardından bir koşul belirttik. Bu koşul sağlandığı sürece bloktaki komutlar çalışacaktır. Her bir iteration'da yani döngü adımında diziden bir eleman sildik. 3. aşamada dizide eleman kalmayacak ve artık koşul sağlanmadı için 4. aşama gerçekleşmeyecek. Eğer sonsuz bir while döngüsü tanımlamak istiyorsak koşul olarak true değerini verebiliriz:


while (true) { ... }
Bu şekilde döngü break ifadesi ile sonlandırılana kadar çalışmaya devam edecektir. Do-while döngüsünde ise do bloğundaki komutlar, koşul sağlansa da sağlanmasa da en az bir kez çalışır. Daha sonra koşula göre komutlar çalışır veya çalışmaz:


var line;
do {
    line = prompt('Enter a number:');
} while (!/^[0-9]+$/.test(line));
for döngüsünü tanımlamamız için bir komut, bir koşul ve her adımdan sonra gerçekleşecek bir komut belirlemeliyiz:


for ( <<komut>>; <<koşul>>; <<komut>>) {
    ...
}
for döngüsünü while döngüsü ile şu şekilde tanımlayabiliriz:


<<komut>>
while (<<koşul>>) {
    ...
    <<komut>>
}
Bir örnek yapalım:


var arr = ['a', 'b', 'c'];
for (var i=0; i<arr.length; i++) {
    console.log(arr[i]);
}

>>

a
b
c
Bu döngüyü while döngüsü ile tekrar oluşturalım:


var i = 0;
while (i < arr.length) {
    console.log(arr[i]);
    i++;
}
Sınırsız for döngüsü tanımlamak için komutları ve koşulu boş bırakabiliriz:


for (;;) {
    ...
}
for-in döngüsü ile iterable objelerde gezinebiliriz. Java'daki for-each döngüsü ile aynı döngüdür:


for (<<variable>> in <<object>>) {
    ...
}
for-in döngüsünü dizi elemanlarında gezinirken kullanmamalıyız. Elementlerin yerine indexleri ve tanımladığımız özellikleri basar:


var arr = ['a', 'b', 'c'];
for (var key in arr) { console.log(key); }

>>

0
1
2

arr.foo = true;
for (var key in arr) { console.log(key); }

>>

0
1
2
foo
for-in döngüsünde özellikleri basarken miras aldığımız özellikler de basılır. Bunu engellemek için hasOwnProperty() methodunu kullanabiliriz:


function Person(name) {
    this.name = name;
}

Person.prototpye.describe = function () {
    return 'Name: ' + this.name;
};

var person = new Person('Jan');

for (var key in person) {
    console.log(key);
}

>>

name
describe

for (var key in person) {
    if (person.hasOwnPropety(key)) {
	console.log(key);
    }
}

>>

name
Koşul ifadelerine geçelim. if-then-else yapısını inceleyelim. if ifadesini bir koşul ile kullanırız. Sadece if ifadesini kullanabiliriz. if ifadesindeki koşulun gerçekleşmeme durumunda çalışacak bir bloğu da else ifadesi ile belirleyebiliriz:


if (<<koşul>>) {
   ...
} else {
   ...
}
else if ifadesi ile ilk if bloğunun çalışmama durumunda else if bloğunu çalıştırabiliriz. Tabi bu koşula bağlıdır. Zincirleme olarak else if blokları tanımlayabilir, hiç bir bloğun çalışamama durumunda else bloğunu çalıştırabiliriz:


if (s1 > s2) {
    return 1;
} else if (s1 < s2) {
    return -1;
} else {
    return 0;
}
switch-case yapısında belirlediğimiz ifade hangi etiket ile örtüşüyorsa o blok çalışır:


switch (<<ifade>>) {
    case <<etiket_1>>:
        ...
        break;
    case <<etiket_2>>:
        ...
        break;
    ...
    ...
    default:
        ...
	break;
}
Örneğin ifademizi x olarak belirledik. x ifadesinin değeri 2 ise case 2 bloğu çalışacaktır. Çoklu tanımlama yapabiliriz. Örneğin negatif bir değer geldiğinde değerin pozitife çevrilmesini istiyoruz. Bu durumda her bir negatif sayı için tek tek komut vermek zorunda değiliz. Örneğin case -10: ifadesinden sonra herhangi bir komut vermek yerine case -9: ifadesini yazarız. Bu şekilde -1'e kadar gidersek, -10 ile -1 arasında herhangi bir değer gelmesi durumunda tek bir komut çalışır:


case -10:
case -9:
case -8:
case -7:
case -6:
case -5:
case -4:
case -3:
case -2:
case -1:
    x = -x;
Yukarıdaki örnekte x değerinin -3 olması durumunda ne olur? -3 etiketli blok çalışır fakat herhangi bir komut olmadığından alt satıra geçilir. case -2 bloğunda da aynı işlem olur ve -1 bloğuna geçilir. case -1 bloğunun devamı olsaydı o bloklar da çalışacaktı. Bloklar sırasıyla çalışır, bir sonraki bloğa geçilmesini engellemek için break ifadesini kullanmalıyız. break ifadesi yerine throw ifadesi ile hata fırlatımı yapabiliriz veya fonksiyon tanımlıyorsak return ifadesi ile de sonlandırabiliriz:


function divide(dividend, divisor) {
    switch (divisor) {
	case 0:
	   throw 'Division by zero';
	default:
	   return dividend / divisor;
    }
}
Etiketler uyuşmaz ise default bloğu çalışır. default bloğunu tanımlamazsak herhangi bir blok çalışmadan switch-case yapısı sona erer. Son olarak debugger ifadesi ile breakpoint'ler oluşturabiliriz:


debugger;


Sonraki Yazı: Exception Handling
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın