İçeriğe geç
parazade

Iterator Nedir?

Yayın: · Son güncelleme:

Iterator Nedir? Kısaca

Iterator (yineleyici), bir liste ya da koleksiyonun elemanlarına sırayla, birer birer erişmeyi sağlayan nesnedir. Her çağrıda bir sonraki elemanı verir ve elemanlar bittiğinde bunu bildirir.

Iterator nedir?
İçindekiler
  1. Iterator nedir?
  2. Nasıl çalışır?
  3. Neden kullanılır?

Iterator nedir?

Iterator, bir veri kümesinde nerede kaldığını hatırlayan bir işaretçi gibidir. Ondan "sıradaki" elemanı istersiniz, o da verir ve bir adım ilerler. Elemanlar bitince durumu bildirir.

for döngüleri arka planda bu mekanizmayı kullanır. Python'da for urun in sepet yazdığınızda dil, sepetten bir iterator alır ve elemanlar bitene kadar sıradakini ister.

Nasıl çalışır?

Python'da bu süreci elle de görebilirsiniz:

renkler = ["kırmızı", "mavi"]
it = iter(renkler)
next(it)  # "kırmızı"
next(it)  # "mavi"
next(it)  # StopIteration hatası

Üçüncü çağrıda eleman kalmadığı için StopIteration fırlatılır. for döngüsü bu sinyali yakalar ve sessizce biter. Java'da aynı işi hasNext() ve next() metotları görür.

Kendi sınıfınızı döngüyle dolaşılabilir yapmak için Python'da iter ve next metotlarını tanımlamanız yeterlidir.

Neden kullanılır?

Iterator'ın asıl gücü, verinin tamamını belleğe almadan işleyebilmesidir. 5 GB'lık bir log dosyasını satır satır okumak bunun klasik örneğidir. Dosya nesnesi bir iterator olduğu için her adımda yalnız bir satır bellekte durur.

Dikkat edilmesi gereken nokta, çoğu iterator'ın tek kullanımlık olmasıdır. Bir kez sonuna kadar dolaştıktan sonra ikinci döngü hiçbir şey döndürmez. Veriyi birden fazla kez gezmeniz gerekiyorsa listeye çevirin ya da yeni bir iterator oluşturun. Iterator yazmanın en kısa yolu ise generator fonksiyonlarıdır.

Sıkça Sorulan Sorular

Iterable ile iterator arasındaki fark nedir?

Iterable, üzerinde döngü kurulabilen nesnedir, örneğin bir liste. Iterator ise bu nesneden alınan ve sıradaki elemanı veren, konumunu hatırlayan nesnedir. Bir listeden istediğiniz kadar iterator üretebilirsiniz.

Iterator'ı geri sarmak mümkün mü?

Standart iterator'lar yalnız ileri gider ve geri sarılamaz. Baştan başlamak için kaynaktan yeni bir iterator oluşturmanız gerekir.

İlgili terimler