• "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.
  • iterator bir ınterface'tir ve bu interface icerisinde 4 farkli metod bulunur. bu metodlardan 2 tanesi bu interface'i implemente eden class'lar tarafindan implemente edilmek "zorunda"dir. iterator bize aslinda bir "object" geri döndürür ve for - while loop'lardan bu acidan da farklidir. for - while loop'lar ise birer dil construction'tir. iterator ise "type ıterator"den bir object'tir.

    bu 2 metod "hasnext()" ve "next()" metodur. bu metodlar sayesinde "for ya da while" döngüsünde olmayan islemler yapilabilir. bir sonraki elemana erisim yani almanca zugriff yapilabilir ya da sonraki eleman mevcut mu degil mi diye bir boolean deger döndürülebilir.

    object next( ) --> return "next element"
    boolean hasnext( ) --> return true or false (if next element exist or not exist)
    default void remove( ) --> removes the "current element", which is pointed by iterator at the moment

    iterator sayesinde bir liste üzerinde (bkz: collections) (bkz: single linked list) ((bkz: arraylist) (bkz: list) bir elemandan baska elemana sirayla gezmek mümkündür, istenilen elemani return ile geri döndürmek ya da interface'de yer alan diger 2 metoddan biri olan "default remove" methodunu implemente ederek iterator'un isaret ettigi elemani diziden cikarmak vb loop'lar ile yapilamayak islemleri yapma imkani sunar.

    ıterator hali hazirda list, arraylist, single linked list gibi class'lar icin uygulandigi icin bu veri tipleri ile calisirken iterator interface'i explizit olarak implemente etmeye gerek yoktur.

    fakat kendi yazdiginiz bir class icin ayrica bir "getıterator( )" metodu ile sizin yazdiginiz klass icin bir iterator olusturmak isteniyorsa mecburen implemente etmek "hasnext( )" ile "next( )" metodlarini @override etmek gerekiyor

    iterator'un arraylist ile kullanimi icin bir örnek;

    /* listing1502.java */

    import java.util.*;

    public class listing1502
    {
    public static void main(final string[] args) {

    // liste olusturup, 1'den 20'e kadar rakamlarli listeye ekleme
    final arraylist list = new arraylist();
    for (int i = 1; i <= 20; ++i) {

    list.add("" + i);
    }

    // liste icin bir iterator olusturup, sonrasinda bu iterator araciligi ile listeyi gezip listede yer alan "1" ile baslayan elemanlari listeden cikarma
    ıterator myıterator = list.iterator();

    while (myıterator.hasnext()) {

    final string s = (string) myıterator.next();
    if (s.startswith("1")) {
    myıterator.remove();
    }
    }

    // "1" ile baslayan elemanlar listeden uzaklastirildiktan sonra kalan elemanlarin iterator araciligi ile konsolda yazdirilmasi
    myıterator = list.iterator();
    while (myıterator.hasnext()) {
    system.out.println((string) myıterator.next());
    }
    }
    }

    iterator bize bir listeyi yalnizca tek yönde gezme imkani sunar. iterator interface'den türetilen baska bir interface olan "list_iterator" ise list type'dan bir collection'u her 2 yönde gezme imkani sunar, bu sebeple list_iterator interfacesi iterator interface'indan farkli olarak;

    boolean hasprevious( )
    object previous( )
    int previousındex( ) gibi metodlar sunar.
  • eminim bu konu daha fazla türkçe kelimeyle de anlatılabilir. biraz daha emekle olacak gibi.

    tanım: yazılım dillerinde bir dizinin elemanlarını sırayla işleme almak için kullanılan, nesneye ait bir özelliktir (procedural dil değilse).
hesabın var mı? giriş yap