[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 -