C# ile Iterator Pattern Kullanımı

C# ile Iterator Pattern Kullanımı


Yazılım geliştirme sürecinde, veri yapıları ve nesne koleksiyonları üzerinde gezinmek kritik bir rol oynar. Bu noktada, Iterator Pattern yani İteratör modeli, belirli bir koleksiyon üzerinde tek bir arayüzle gezinmeyi sağlamaktadır. C# dilinde bu deseni kullanmak, yazılım mimarisini daha esnek hale getirebilir, kodun okunabilirliğini ve bakımını kolaylaştırır. Bu makalede, Iterator Pattern’in ne olduğunu, neden kullanıldığını ve C# ile nasıl uygulandığını ele alacağız.

İteratörModeli Nedir?

Iterator Modeli, bir nesne koleksiyonu üzerinde dolaşım (iteration) yapmayı sağlayan bir tasarım desenidir. Görsel bir benzetme yapacak olursak, bir grup kitap arasından istediğiniz kitabı bulmak için kitapların sırasıyla sırayla bakmak yerine, oturum açarak tüm kitaplara erişim sağlayan bir indeks düşünün. Bu model, koleksiyondaki öğelere erişim için bir arayüz sunar ve koleksiyonun nasıl saklanacağından bağımsızdır. Bu sayede çeşitli koleksiyonlar için aynı arayüzü kullanabilirsiniz.

C# ile İteratör Modelinin Uygulanması

C# dilinde iterator deseni uygulamak oldukça basittir. Öncelikle bir koleksiyon oluşturalım. Daha sonra, bu koleksiyon üzerinde gezinmek için bir iterator oluşturacağız. Aşağıda, bir kitap koleksiyonunun nasıl oluşturulacağına ve üzerinde nasıl geçiş yapılacağına dair örnek bir kod bulunmaktadır.

Örnek Uygulama

using System;
using System.Collections;
using System.Collections.Generic;

// Kitap nesnesi
public class Kitap {
    public string Ad { get; set; }
    public string Yazar { get; set; }
    
    public Kitap(string ad, string yazar) {
        Ad = ad;
        Yazar = yazar;
    }
}

// Kitap koleksiyonu
public class KitapKoleksiyonu : IEnumerable {
    private List kitaplar = new List();

    public void Ekle(Kitap kitap) {
        kitaplar.Add(kitap);
    }

    public IEnumerator GetEnumerator() {
        foreach (var kitap in kitaplar) {
            yield return kitap;
        }
    }

    IEnumerator IEnumerable.GetEnumerator() {
        return GetEnumerator();
    }
}

class Program {
    static void Main() {
        KitapKoleksiyonu koleksiyon = new KitapKoleksiyonu();
        koleksiyon.Ekle(new Kitap("Sefiller", "Victor Hugo"));
        koleksiyon.Ekle(new Kitap("1984", "George Orwell"));
        koleksiyon.Ekle(new Kitap("Savaş ve Barış", "Tolstoy"));

        foreach (var kitap in koleksiyon) {
            Console.WriteLine($"{kitap.Ad} - {kitap.Yazar}");
        }
    }
}

Yukarıdaki kodda, Kitap sınıfı, kitap bilgilerini tutarken, KitapKoleksiyonu sınıfı, koleksiyondaki kitapları saklayıp üzerlerinde gezinmemizi sağlayan bir Iterable sağlar. IEnumerable arayüzünü uygulayarak, koleksiyon üzerinden döngü yapmamıza imkan tanır. Main metodunda, örnek kitaplar ekleyip koleksiyonu döngü ile yazdırıyoruz.

Sonuç

Iterator Pattern, C# ve diğer pek çok programlama dilinde, yukarıdaki gibi basit bir yapıda uygulanarak kodunuzu daha düzenli ve kolay okunur hale getirebilir. Farklı koleksiyon tipleri için aynı arayüzü kullanmak, kod tekrarını azaltır ve geliştirme sürecini hızlandırır. Iterator deseni, büyük ve karmaşık projelerde bile, veri yapıları üzerinde kolaylıkla gezinmenizi sağlar.