V tomto článku budeme dále zkoumat Iterator a jeho dopad na dnešní společnost. Iterator je tématem zájmu a diskusí po mnoho let a jeho relevance zůstává hmatatelná i dnes. Od svých počátků až po vývoj v průběhu času zanechal Iterator významnou stopu v různých aspektech lidského života a ovlivnil vše od mezilidských vztahů po politickou a ekonomickou dynamiku. Prostřednictvím této podrobné analýzy se budeme snažit lépe porozumět roli Iterator v dnešním světě a zamyslet se nad jejím vlivem v budoucnosti.
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ší.
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
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. 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<Person> 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++);
}
}
}