# Iterator (Yineleyici)

Adres: https://softwaredictionary.org/tr/terimler/iterator
Kategori: Programlamanın Temelleri
Son güncelleme: 2026-09-30
Okunuşu: itıreytır

Kısaca: Iterator, verinin nasıl saklandığını açığa çıkarmadan, konumunu hatırlayarak bir koleksiyonun öğeleri arasında teker teker ilerlemeyi sağlayan bir nesnedir.

## Iterator nedir?

Iterator, bir dizinin öğelerini tek tek üreten bir nesnedir. Her sonraki öğeyi istediğinizde o öğeyi döndürür ve ilerler; hiçbir şey kalmadığında bittiğini bildirir. JavaScript'teki `for...of` döngüleri, Python'daki `for` döngüleri ile C# ve Java'daki `foreach` döngüleri koleksiyonlar üzerinde iterator'lar aracılığıyla gezinir.

Çoğu dil bunun için küçük bir protokol tanımlar. Python'da iterable, bir iterator döndüren `__iter__` metoduna sahip her şeydir ve iterator'ın `__next__` metodu, `StopIteration` hatası verene dek öğeleri döndürür. JavaScript'te bir iterator'ın `next()` metodu `{ value: 1, done: false }` gibi nesneler döndürür; Java ve Rust'ta da benzer `Iterator` interface'leri vardır. Öğeler talep üzerine üretildiği için iterator'lar her şeyi belleğe yüklemeden büyük dosyalar, veritabanı sonuçları ve hatta sonsuz diziler üzerinde gezinebilir; `yield` ile yazılan üreteç (generator) fonksiyonlar bunları oluşturmanın elverişli bir yoludur.

Iterator, bir kitapta ilerleyen bir yer imi gibidir: nerede olduğunuzu bilir, istediğinizde sonraki sayfayı verir ve kitabın karton kapaklı mı yoksa e-kitap mı olduğuyla ilgilenmez. Iterator tasarım deseninin ardındaki fikir budur; aynı döngü dizilerle, bağlı listelerle, ağaçlarla, kümelerle ya da akışla gelen verilerle çalışabilir, çünkü döngü yalnızca iterator ile konuşur, altındaki veri yapısıyla asla konuşmaz.

Iterator'lar sıklıkla iterable'larla karıştırılır. Iterable, bir liste gibi üzerinde dönülebilen koleksiyondur; iterator ise ondan oluşturulan ve geçerli konumu izleyen tek kullanımlık imleçtir. Bir liste üzerinde birçok kez dönebilirsiniz, ancak bir iterator genellikle tek geçişten sonra tükenir ve bu, onu yeniden kullanmaya çalışanları şaşırtır.

## Önemli noktalar

- Iterator, öğeleri teker teker döndürür ve geçerli konumunu hatırlar.
- Iterable koleksiyondur; iterator ise ondan oluşturulan imleçtir.
- `for...of` ve Python'ın `for` döngüsü gibi döngüler arka planda iterator kullanır.
- Iterator'lar öğeleri tembel (lazy) üretebilir; bu, çok büyük veya sonsuz dizileri destekler.
- Çoğu iterator tek geçişten sonra tükenir ve yeniden dönmek için yeniden oluşturulmalıdır.

## Örnek: Python'da iterator'lar ve üreteçler

```python
colors = ["red", "green", "blue"]   # an iterable

it = iter(colors)                   # create an iterator from it
print(next(it))  # red
print(next(it))  # green

# A generator function produces a lazy iterator
def countdown(n):
    while n > 0:
        yield n
        n -= 1

print(list(countdown(3)))  # [3, 2, 1]
```

## Sık sorulan sorular

**Iterator ile iterable arasındaki fark nedir?**

Iterable, bir liste veya dize gibi üzerinde dönebileceğiniz bir şeydir. Iterator ise gerçekten adım atma işini yapan, her seferinde bir öğe döndüren ve nerede olduğunu izleyen nesnedir.

**Iterator ile generator arasındaki fark nedir?**

Generator, `yield` kullanan bir fonksiyon yazarak iterator oluşturmanın elverişli bir yoludur. Her generator bir iterator'dır, ancak iterator'lar yineleme protokolünü uygulayan sınıflar olarak elle de yazılabilir.

**Bir iterator üzerinde neden iki kez dönemiyorum?**

Iterator dahili bir konum tutar ve sona ulaştığında orada kalır. Yeniden dönmek için özgün koleksiyondan yeni bir iterator oluşturun.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
