Ana içeriğe geç

Iterator

Yineleyici

Okunuşu
itıreytır
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/iterator

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çlerpython
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.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar