> 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.md).

# Döngüler

Programlama dillerinde döngü (**loop**); bir dizi işlemi belirli bir sayıda veya bir koşul gerçekleşene kadar yinelemektir. Döngüler yineleme açısından iki türden olur.

* Sayaçlı Döngüler: Belirli bir sayıda tekrar eden, teorik olarak işlemin tekrarlama sayısı belli olan döngüler.
* Koşullu Döngüler: Belirlenen koşul gerçekleşene kadar tekrar eden, teorik olarak işlemin tekrarlanma sayısı belli olmayan döngüler.

Esasında 'Sayaçlı Döngüler' de sayacın ***belirli*** bir sayıya ulaşma ***koşuluna*** göre çalışmaktadır. Fakat döngü sayısının ***belirli*** olması ayrımı vardır. Javascript'te kullanılan üç tane döngü deyimi vardır.

* **for** Döngüsü ( Sayaçlı Döngü )
* **while - do while** Döngüsü ( Koşullu Döngü )

Döngülerle birlikte şu kavramları da şimdiden öğrenmeniz faydalıdır.

* **Sıralanmış (Ordered) Veriler**: Öğelerine belirli bir sıra ile erişilebilen veri yapısı.

  Örnek olarak:

  <pre class="language-javascript" data-line-numbers><code class="lang-javascript">let str = 'Javascript';
  </code></pre>

  **`string`** tipinin veri yapısı sıralanmış (**ordered**) olduğu için **`str`** değişkeninin her bir öğesine (karakterine) teker teker ulaşabiliriz. Örnek.

  <pre class="language-javascript" data-line-numbers><code class="lang-javascript">alert( str[2] ); //v harfi çıktısı verir.
  </code></pre>
* **Sıralanmamış (Unordered) Veriler**: Öğelerine belirli bir sıra ile erişilemeyen veri yapısı.

  Örnek olarak:

  <pre class="language-javascript" data-line-numbers><code class="lang-javascript">let sayi = 123;
  alert( sayi[0] ); //'undefined' çıktısı verir. Sırası ile erişilemez.
  </code></pre>
* **Değiştirilebilir (Mutable) Veriler**: Değiştirilebilmesi mümkün veri birimi.

  Örnek olarak:

  <pre class="language-javascript" data-line-numbers><code class="lang-javascript">let str = 'Programlama Dili';
  str = 'JavaScript'; // str mutable, değiştirilebilir.
  let sayi = 123;
  sayi = 0;
  </code></pre>
* **Değiştirilemez (Immutable) Veriler**: Değiştirilebilmesi mümkün olmayan veri birimi.

  Örnek olarak:

  <pre class="language-javascript" data-line-numbers><code class="lang-javascript">let str = 'TUR';
  str[1] = 'I'; // İşlem yapılmaz. Değiştirilemez (immutable)
  alert(str);
  </code></pre>
* **Yinelenebilir (Iterable) Veriler**: Öğeleriyle yinelenebilir özellikte olan veri yapısı.
* **Yineleyici (Iterator)**: Bir veri yapısının yinelettirilebilen her bir birimi.

Örnek olarak **`string`** veri tipini ele alalım. **`String`** türünde oluşturulmuş bir değişkenimiz olsun:

{% code lineNumbers="true" %}

```javascript
let karakterDizisi = 'Javascript';
```

{% endcode %}

**`string`** tipinin veri yapısı sıralanmış (**ordered**) olduğu için **`karakterDizisi`** değişkeninin her bir öğesine (karakterine) teker teker ulaşabiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
alert( karakterDizisi[2] ); //v harfi çıktısı verir.
```

{% endcode %}

**`string`** veri yapısı değiştirilebilir (**mutable**) olduğu için **`karakterDizisi`** değişkeninin tuttuğu veriyi değiştirebiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
karakterDizisi = 'Programlama Dili';
```

{% endcode %}

Fakat **`karakterDizisi`** değişkeninin eriştiğimiz (dilimlediğimiz) herhangi bir öğesi değiştirilemez (**immutable**) yapıdadır. Değiştiremeyiz. Örnek.

{% code lineNumbers="true" %}

```javascript
karakterDizisi[0] = 'T'; // İşlem yapılmaz. Değiştirilemez (immutable)
alert(karakterDizisi);
```

{% endcode %}

Her bir karakteri ekrana uyarı olarak verme işlemini bir döngü (**loop**) veya yineleyici (**iterator**) sayesinde yapabiliriz. Döngü ve yineleme farklı terimlerdir.

**`string`** veri yapısı yinelenebilir (**iterable**) olduğu için **`karakterDizisi`** değişkeninin tuttuğu verinin her bir birimi (**iterator)** ile tekerrür ettirebiliriz.
