şükela:  tümü | bugün
  • "oldukça kullanışlı bir interfacedir" diyeceğim ve sözü sun microsystemsa bırakacağım..

    (bkz: http://java.sun.com/…cs/api/java/util/iterator.html)
  • aylardır çaylak modunda takılmaktan bunalmış, hatta kudurmuş anadolu delikanlısı. yiğidin harman olduğu yerden gelmiş, hoşgelmiş... *
  • cursor olarak da adlandirilan bir design pattern. behavioural bir patterndir.
  • dokuzuncu nesil sabirtasi yazar.
  • php'de olan bişi. ne işe yaradığını bilmiyorum ama güzel bişiler yapıyor olabilirler gibi geldi bana sanki.

    http://tr.php.net/manual/en/spl.iterators.php
  • kodun, veri yapısının iç tasarımı bilgisine ihtiyaç duymadan belirli bir arayüz sayesinde elemanlar üzerinde gezinebilmesini sağlayan yapısal bir tasarım motifi (bkz: structural design pattern) . client bu tasarım motifinde sadece iki arayüze kod yazar . (bkz: programming to interface) bu sayede client somut sınıflardan bağımsız hale getirilir. işin temelinde zaten polymorphic iteration yatmaktadır. iterator tasarım şablonunun bir örneği java collection frameworkde mevcut zaten. bu örneği ele alırsak client kod sadece iterable ve iterator interfacelerini tanıyacak. iterable interface'i şu;

    public interface iterable<t> {

    iterator<t> iterator();

    }

    iterator interface'i de şu;

    public interface iterator<e> {

    boolean hasnext();

    e next();

    void remove();

    }

    frameworkdeki yapılar iterable interfaceini gerçekler ki bu interface objenin iterator yaratmasını zorunlu kılar ve barındırdığı tek methodun döndürdüğü tip de soyut bi tiptir.

    iterator interface'ini gerçekleyen somut iteratorlar gezintiyi sağlayan fonksiyonları sağlamak durumundalar.

    iterator mekanizmasını ayrı bi objede sağlamak aynı yapı üzerinde çoklu gezintiye izin verir.

    şöyle bi kod kendisine verilen herhangi bi iterable nesne üzerinde gezebilir;
    (collection interface'i iterable'i extend eder)

    http://download.oracle.com/…erfaces/collection.html adresindeki kod;

    static void filter(collection<?> c) {
    for (iterator<?> it = c.iterator(); it.hasnext(); )
    if (!cond(it.next()))
    it.remove();
    }
    son bi örnek olarak java enhanced for loop'u verebilirim. bu döngü yapısının ihtiyacı olan bi iterable nesnesidir. arka planda dönen; iterator objesini yaratmak ve bu obje aracılığı ile iterable üzerinde gezmek.
  • "ıf a collection is modified by one of its methods after an iterator is created for that collection,
    the iterator immediately becomes invalid—operations performed with the iterator
    after this point throw concurrentmodificationexceptions. for this reason, iterators
    are said to be “fail fast.”"

    kaynak: java how to program, deitel
  • bunu saglamak icin class'in iterable interface'ini impelement etmesi gerekir, bu da aslinda getiterator() veyahut benzeri bir isimde, o class'e ait bir iterator nesnesi donen tek method'lu bir interface'tir.

    iterator, hasnext() ve next() seklinde iki metod'a sahip bir interfacetir. hasnext() boolean doner, bu interface'i implement edecek olan class bir index tutar ve tutulan sey (bir liste, array, ya da her neyse ?) her neyse index onun buyuklugunden az oldugu surece hasnext() true, aksi durumda false doner.

    next() method'u, hasnext() true ise, tutulan veri yapisinin o index'teki degerini doner ve bir arttirilir.

    iterator interface'ini implement eden class, ya concrete class'in inner class'i ya da ayri bir class olup concrete class'in private field'i olmak zorundadir. boylelikle getiterator() aslinda bu class'in getter'i olmus olur.
  • c++'da standrad library mevzu bahisse, buradaki iterator'da `->` operatoru ile (bkz: dereferencing) iterator uzerinden nesneye ulasmamizin sebebi, iteratorun bir pointer olmasi degil, dereferencing operatorunun overload edilmesidir, aynen `++` pre/post increment operatorunun overload edilmesi gibi.

    bunu gorunce stl'i yazanlara karsi derin bir saygi olusur, alex stepanov'un pismaniye kivamina gelmis killi ellerini opmek ister insan.
  • (bkz: listiterator)