> For the complete documentation index, see [llms.txt](https://hanuce.gitbook.io/javascript-egitimi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hanuce.gitbook.io/javascript-egitimi/donguler/while-do-while-dongusu.md).

# while - do while Döngüsü

## `while` Döngüsü

İşlemlerin ***belirli bir koşulun `true` olduğu sürece*** yinelendiği döngüdür. Bu döngü türünde belirli bir koşul olur ve koşulun geçerli olduğu sürece döner. Koşulun geçerli olmadığı durumda döngü başlamaz, biter. Kullanım.

{% code lineNumbers="true" %}

```javascript
while (kosul) {
    //döngü kod bloğu
}
//kodlar...
```

{% endcode %}

**`while`** döngüsünde koşul **`true`** veya **`false`** olarak değer alır. Yani yapı şöyledir.

{% code lineNumbers="true" %}

```javascript
while (true) { // döngüye girilir ve tekrar buraya gelinir.
    //döngü kod bloğu
}
// kodlar...
```

{% endcode %}

{% code lineNumbers="true" %}

```javascript
while (false) { // döngüye girilmez. Çıkıştan devam eder.
    //döngü kod bloğu
}
//kodlar...
```

{% endcode %}

Örnek olarak.

{% code lineNumbers="true" %}

```javascript
let ePosta;
//eposta adresi bir değer alana kadar döngü devam eder.
while (ePosta == undefined || ePosta == '') {
    ePosta = prompt('E-Posta Adresinizi Giriniz.')
}
```

{% endcode %}

{% code lineNumbers="true" %}

```javascript
let toplam;
alert('Toplamı 20 olmayan iki sayı girdiğiniz sürece sürekli uyarı alacaksınız!')
while (toplam != '20') { //toplam 20 olmadığı sürece döngü döner.
    let sayi1 = prompt('1.Sayıyı Giriniz:'),
        sayi2 = prompt('2.Sayıyı Giriniz:');
    toplam = Number(sayi1) + Number(sayi2);
    //toplamları 20 olan sayılar yazarsanız döngü sonlanır
}
alert('Döngü Bitti');
```

{% endcode %}

{% code lineNumbers="true" %}

```javascript
let denemeSayisi = 1, pin = '1234';
alert('PIN Kodunu 3 kere deneme hakkınız var.');
while (denemeSayisi <= 3) {
  let girilenPin = prompt('Pin Kodunu Giriniz: ');
  if (pin === girilenPin) {
  	denemeSayisi = 5; //3'ten büyük bir değer ile sonraki döngüyü engelledik.
  } else {
  	denemeSayisi++;
  }
  if (denemeSayisi == 4) { //4'ile hakkını sonlandırdık.
  	alert('Deneme hakkınız bitmiştir.')
  }
  if (denemeSayisi == 5) { //5 olduysa bilmiştir. DOĞRU uyarısını verelim.
  	alert('DOĞRU. Giriş yapılıyor...')
  }
}
```

{% endcode %}

Bu döngü türüne elle oluşturulan bir sayaç koşul olarak verilirse sayaçlı döngü gibi çalışır. Fakat genel kanı sayaçsız olarak kullanım üzerinedir. Örnekler.

{% code lineNumbers="true" %}

```javascript
// Genel kullanım
let tcNo = prompt('TC Numaraınızı Giriniz: ');
while ( tcNo.length != 11) { //tcNo uzunluğu 11 olmadığı sürece döner
   tcNo = prompt('TC No 11 haneli olmak zorundadır. Tekrar Giriniz: ')
}
alert('TC NO Uzunluğu doğru!');
```

{% endcode %}

{% code lineNumbers="true" %}

```javascript
// Sayaçlı örnek
let i = 1;
while (i <= 3) { //i küçük eşit 3 olduğu sürece
    alert(i);
    i++;
}
```

{% endcode %}

**`number`** tipinde **`true`**  sıfır olmayan (**0**) bir değer, **`false`** ise sıfır (**0**) değeridir. Örnek.

{% code lineNumbers="true" %}

```javascript
let sayi = 5;
while (sayi) { //baştan true
    alert(sayi);
    sayi--; // 0 olunca false olur.
}
```

{% endcode %}

**`string`** tipinde ise **`true`** boş olmayan herhangi bir değer, **`false`** ise boş ('') olan değerdir. Örnek.

{% code lineNumbers="true" %}

```javascript
let karakterDizisi = ' ',
    sayac = 1;
    
while (karakterDizisi) { //baştan true
    if (sayac > 3) {
        karakterDizisi = ''; // sayac 3'ü geçerse boş değer ile false olur.
    } else {
        alert(`While Döngüsü Sayacı: ${sayac}`);
    }
    sayac++;
}
```

{% endcode %}

Eğer **`while`** bloklarında tek satırlık kod yazacaksanız blok açmadan aynı satırda da yazabilirsiniz. Örnek.

{% code lineNumbers="true" %}

```javascript
let i = 3;
while (i) alert(i--);
```

{% endcode %}

## `do while` Döngüsü

**`do while`** döngüsü ile döngüye ait kod blokları bir kez çalıştırılır ardından koşul kontrol edilir eğer koşul **`true`** ise tekrar başa dönerek döngüye devam eder kodları yeniden çalıştırır, **`false`** ise döngü olarak devam etmez. **`while`** döngüsünden farkı, koşul **`false`** bile olsa kod blokları en az bir sefer yürütülmüş olur.

Örnek olarak.

{% code lineNumbers="true" %}

```javascript
let i = 0;
do {
    i++;
    alert(i);
} while(i == 0); // koşul doğru olmasa bile bir kez yürütülmüş olur.
```

{% endcode %}

Başka bir örnek olarak.

{% code lineNumbers="true" %}

```javascript
let ePosta; // ePosta şu an false
//eposta adresi bir değer alana kadar döngü devam eder.
do {
    ePosta = prompt('E-Posta Adresinizi Giriniz.');
} while ( !ePosta ); // ePosta değer girilmezse false, değili (!) true
alert(ePosta);
```

{% endcode %}

Farklı bir örnek olarak.

{% code lineNumbers="true" %}

```javascript
let ePosta; // ePosta şu an false
//eposta adresi bir değer ve doğrulaması olana kadar döngü devam eder.
do {
    ePosta = prompt('E-Posta Adresinizi Giriniz.');
    // ePosta için değer girilirse true olur boşsa false
    
    if ( ePosta && !confirm(`Eposta Adresinizi Onaylayın\n${ePosta}`) ) {
        ePosta = '';
    }
} while ( !ePosta );
alert(ePosta);
```

{% endcode %}
