Iterator

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Návrhový vzor Iterator zajišťuje možnost procházení prvků bez znalosti jejich implementace. Lze implementovat pomocí pole nebo jiných datových struktur. Pomocí datové struktury ArrayList je implementace daleko snazší.

Implicitní iterátory

Některé objektově orientované jazyky jako Perl, Python, C#, Ruby a pozdější verze Javy a Delphi poskytují vlastní způsob jak iterovat elementy obsahující objekty nebo primitivní datové typy bez explicitního vytvoření iterátoru. V tomto případě iterátor není přístupný pro ostatní kód, ale lze k němu přistoupit v dané posloupnosti elementů.

Implicitní iterátory jsou často označovány jako "foreach" a tento styl procházení elementů se také někdy nazývá "vnitřní iterace". Takto vypadá implicitní iterace v programovacím jazyce Python:

for value in iterable: print(value)

Jiný případ je v jazyce Ruby, tam si může objekt vytvořit kolekci sám sobě:

iterable.each do |value| puts value end

Implementace iteratoru v jazyce Java

V ukázce jsou osoby a jejich kolekce. Kolekce obsahuje vnitřní třídu s názvem PersonIterator, pomocí které ji můžeme celou procházet. +more Třída PersonIterator implementuje rozhraní Iterator, které obsahuje metody hasNext;(zjistí jestli je v kolekci další osoba) a getNext;(získá další osobu v kolekci). V této ukázce je kolekce implementována pomocí datové struktury ArrayList.

import java.util.ArrayList;

public class Main {

public static void main(String[] args) { //použití Person per1 = new Person("Jakub", 20); Person per2 = new Person("Lukáš", 21); Person per3 = new Person("Filip", 30); Person per4 = new Person("Honza", 35);

PersonCollection perCol = new PersonCollection;

perCol.add(per1); perCol.add(per2); perCol.add(per3); perCol.add(per4);

Iterator myIt = perCol.Iterator;

while (myIt.hasNext) { Person p = myIt.getNext; System.out.println("Jméno: " + p.getName); System.out.println("Věk: " + p.getAge); System.out.println("---------------------------------"); } } }

class Person {

private String name; private int age;

Person(String _name, int _age) { this.name = _name; this.age = _age; }

public String getName { return this.name; }

public int getAge { return this.age; } }

interface Iterator {

public boolean hasNext; public Person getNext; }

class PersonCollection {

@SuppressWarnings("unchecked") private ArrayList persons = new ArrayList;

public PersonIterator Iterator { return new PersonIterator; }

public void add(Person per) { this.persons.add(per); }

private class PersonIterator implements Iterator { private int current = 0;

public boolean hasNext { if (current

persons.size) { return false; } else { return true; } } public Person getNext { return persons.get(current++); } } }

Související články

Návrhové vzory * Objektově orientované programování * Programování

Externí odkazy == * * [url=https://web.archive.org/web/20090305001642/http://objekty.vse.cz/Objekty/Vzory-Iterator]Návrhový vzor iterator[/url]

Kategorie:Návrhové vzory

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top