# 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hanuce.gitbook.io/javascript-egitimi/donguler/while-do-while-dongusu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
