[Squeak-ev] Re: SqueakInf11-Schlager Anmerkungen
Bert Freudenberg
bert at freudenbergs.de
Die Mar 13 23:07:26 UTC 2007
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 -