On Mar 13, 2007, at 23:24 , Stefan Schmiedl wrote:
Bert Freudenberg (13.03. 23:12):
nicht mogeln. Wie kriege ich mit einem Iterator die Einträge aus der Liste?
<klugscheiß>
catalog atAll: (firstIndex to: lastIndex)
</klugscheiß>
Aber nicht doch ... gibt's atAll: wirklich? Boah! Jahrelang übersehen!
Wenn es das nicht gäbe, müsste man's erfinden ;)
Das Tolle an der Smalltalk-"For-Schleife" ist, dass sie nur ein Iterator über Zahlenintervalle ist.
Das ist richtig. Entspricht aber "vom Gefühl her" genau der alten BASIC/C-For-Schleife, weil "nur" über Zahlen iteriert wird, und die gelten anscheinend nicht als Objekte. Sonst wäre Guido nicht so versessen drauf, sie nicht zum Abarbeiten von Collections herzunehmen.
Naja, da hat er ja im Prinzip auch recht. Allzu oft sehe ich eben die Zahlschleifen, mit denen die Leute per #at: und #at:put: in den Objekten rumfuhrwerken. Das machen besonders gern diejenigen, die sich über die fehlende Indizierungssyntax aufregen, "a[i]" sieht eben zugegebenermaßen nicht halb so schlimm aus wie "a at: i". Dass das aber sofort viel besser lesbar und weniger fehleranfällig wird, wenn man nicht händisch Indizes generiert sondern einfach über die Objekte iteriert, ist schwer in die verbildeten Köpfe zu bekommen.
Insofern wäre es schon gut, eben *nicht* mit den Zählschleifen anzufangen. Leider kenne ich aber kein Informatikbuch, in dem Algorithmen nicht mit mathematischer Indexnotation eingeführt werden. Beispiel Sortieren - vor lauter Indexakrobatik sieht man doch da nie und nimmer das Prinzip! Vergleiche mal einen Quicksort-Algorithmus aus irgendeinem Buch mit dem hier:
qsort self isEmpty ifFalse: [ ^(self select: [:each | each < self first]) qsort , {self first} , (self select: [:each | each > self first]) qsort]
Natürlich gibt es manche Probleme bei denen man Indizes braucht, aber das sind weniger als man denkt. Das eigentliche Problem ist auch nicht die Zählschleife an sich, sondern dass sie an jeder passenden und noch mehr unpassenden Stellen eingesetzt wird. Das kommt von den Büchern, aber auch von Sprachen, die nichts besseres unterstützen.
- Bert -