| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
| Pattern Iterator
Hier ist mal ein einfaches, aber praktisches Beispiel für die Vorzüge der OOP. Eine Iterator-Klasse, beispielhaft für Arrays implementiert. Theoretisch funktioniert das so, dass jede Klasse mit einer Liste, die man irgendwie durchlaufen kann, eine Methode createIterator zur Verfügung stellt. Diese Methode liefert dann ein Iterator-Object mit der gleichen Schnittstelle wie unten. So kann man unabhängig davon, wie die Liste intern aufgebaut ist, jede Klasse auf die gleiche Weise durchlaufen. ActionScript:
Der Vorteil ist, dass man alle Schleifen dieser Art auf die gleiche Weise programmieren kann und sich keine Sorgen darüber machen muss, dass man die Grenzen der Liste überschreitet. Dafür sorgt ja jetzt der Iterator. Nur für Arrays alleine bringt das auch noch nicht so viel, aber wenn man sich jetzt vorstellt, dass eine verlinkte Liste oder ein Baum oder eine Liste, die nur jedes zweite ihrer Elemente liefert, auf die gleiche Weise durchlaufen werden kann, weil sie schliesslich ihren Iterator selbst zur Verfügung stellen, dann geht einem plötzlich ein Licht auf. Es kostet natürlich etwas Performance, also in hochoptimierten inneren Schleifen ist das vielleicht nicht so angesagt. Aber oft genug kommt es ja nicht aufs letzte Byte an und optimieren soll man schliesslich erst zum Schluss. mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #3 (permalink) |
| [Matthias K.] - Moderator Registriert seit: Jun 2001 Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
|
ralf auch wenn es performance frist - ist es eine schöne Umsetzung und ich bin sicher die Jungs und Mädels nehmen es dankbar an. ![]() Ich bin sicher der Flash Player wird in zukünftigen version mehr und mehr OOP Kompatibel, ich denk da an C++ u. Java Klassen strukturen, private u. public, etc. mein wunschzettel ist gross - eine Flamme die in mir wohl auch nicht so schnell erlicht! Wir sollten jedoch froh um jede Erweiterung sein - die fehlerfrei funtzt. War das jetzt eine Anspielung...*hust* Liebe Grüsse Matze |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Jun 2001 Ort: berlin
Beiträge: 829
|
Hi, ich würde den Iterator noch um zwei Methoden erweitern: ActionScript:
Schleife arbeiten: ActionScript:
sparen. Fragwürdig finde ich noch die Reaktion bei Überschreiten der Grenze, was denkt ihr, sollte man in beiden Fällen den Pointer auf null zurücksetzen? nette Grüße, Holger
__________________ gobogo Geändert von hOk (07-04-2003 um 21:15 Uhr) |
| | |
| | #5 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Ja, das ist möglich. Aber was passiert, wenn deine Liste Stellen enthält, die undefined sind ? Und das mit dem Rückwärtsdurchlaufen ist auch ein Beispiel dafür, dass das Durchlaufen selbst genau gleich aussieht und nur durch den Iterator bestimmt wird. Das ist ja das eigentlich Ziel der ganzen Anstrengung. Sozusagen Iterieren ohne Rücksicht auf Verluste. Genaugenommen ist das zweite Beispiel falsch, ich ändere das mal. (nee, doch nicht ) Es kann ja durchaus sein, dass man auch mal rückwärts iterieren will. Man könnte sich aber auch eine Klasse vorstellen, die vom Array abstammt und deren normaler Iterator eben der Rückwärtsiterator ist. Dann würde man es von aussen gar nicht mitkriegen, dass es ein Rückwärts- iterator ist. mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #6 (permalink) | |
| Neuer User Registriert seit: Jun 2001 Ort: berlin
Beiträge: 829
| Zitat:
das wäre dann nicht so schön...;-) grüße, Holger
__________________ gobogo | |
| | |
| | #7 (permalink) | |
| Bugfixer Registriert seit: Nov 2001 Ort: #
Beiträge: 572
|
lol Zitat:
| |
| | |
| | #9 (permalink) |
| Flasher Registriert seit: Sep 2004 Ort: Berlin F-Hain/P-Berg
Beiträge: 43
| warum hat das Interface keine current()-Methode?
warum hat das Iterator-Interface eigentlich keine current()-Methode? hasNext() und next() sind ja schön und gut - aber wenn ich das aktuelle Element nicht abfragen kann, brauche ich die auch nicht. Gibt es vielleicht ein View-Interface, das current() enthält und das ich zusätzlich implementieren kann, um sicher zu stellen, dass ich eine current()-Methode - oder einige von den anderen Iterator-Methoden von oben - bekomme? |
| | |
| | #10 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Interfaces sollen immer möglichst klein sein, und für einen Iterator reichen next und hasNext eigentlich. ActionScript:
next übernimmt dabei eine Doppelfunktion, es liefert das aktuelle Element und stellt den internen Zeiger eins vor. mfg. r
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #12 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Huh, und wie kommen die dann an die Werte? Achso, das ist kein richtiger Iterator, sondern was eingebautes, oder? mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #13 (permalink) |
| Flasher Registriert seit: Sep 2004 Ort: Berlin F-Hain/P-Berg
Beiträge: 43
| du hattest recht: mx.utils.Iterator.next gibt was zurück...
oh, tschuldigung. habe gerade festgestellt, dass es in der Definition von mx.utils.Iterator so drinsteht, wie du es beschrieben hast... besten dank! |
| | |
| | #14 (permalink) |
| Flasher Registriert seit: Sep 2004 Ort: Berlin F-Hain/P-Berg
Beiträge: 43
| xml-Iterator
Hi Folks, vielleicht braucht jemand einen Iterator für XML. Da ich hier schon soviele gute Sachen gefunden habe, hier meine Version. Bin natürlich für Verbesserungsvorschläge immer offen... PHP-Code: |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |