[Squeak-ev] Button-Tutorial

Andreas Raab andreas.raab at gmx.de
Sam Mar 29 16:59:36 UTC 2003


Hi Markus,

> Der Grund: Es gibt zumindest zwei Wege, einen Button einfacher
> zu machen, als Du ihn beschreibst:

Darüber kann man streiten ;-)

> Zum einen via E-Toys, das habe ich zunächst mal erklärt (Bilder lade 
> ich up, sobald ich das Upload-Kennwort wieder weiß), zum zweiten,
> wenn Du es "textprogrammatisch" machen möchtest, brauchst Du "nur"
> die handlesMouseDown: und handlesMouseOver: in
> Morph zu überschreiben und kommst dann ganz ohne when:... aus.

Schon, schon, aber die Frage ob #handlesMouseDown: einfacher ist als
"on:send:to:" ist schwierig zu beantworten. Es gibt zumindest zwei Probleme
damit: Zum einen muss man sich an fünfhundert verschiedene #handlesFooBar:
Methoden erinnern, und wenn man eine vergisst passiert rein gar nix (und
solche Sachen sind wirklich schwer zu finden). Demzufolge ist das "explizite
Setup" mittels #on:send:to: u.U. einfacher zu merken - es hat weniger
Constraints (die Methode kann irgendwie heissen) und man muss sich nur ein
Konzept merken. Zudem ist das Setup zentralisiert, was bedeutet das wenn
jemand rausfinden möchte "was dieses Ding macht" kann er in die
Initialisierung reinschauen und muss nicht wild durch die Klasse browsen.

Zum anderen, ist die Implementation von #mouseDown: o.ä. Methoden eigentlich
eine Modifikation des Frameworks, was bedeutet, man muss zwangsläufig die
"super" Methoden verwenden, was für mich eine (unnötige) Verkomplizierung
des Tutorials darstellt. Du bist Dir übrigens bewusst, dass Dein Beispiel
buggy ist, oder?! ;-) Weder #mouseEnter:, noch #mouseLeave:, noch #mouseUp:
verwenden die "super" Implementationen, was sie eigentlich müssten (nicht so
in Chris' Beispiel).

Der einzige echte "Nachteil" der Verwendung von #on:send:to: ist, dass der
Eventtrigger "zu weit entfernt" von der Methode ist, die darauf reagiert
(und die Syntax ist auch nicht unbedingt trivial). Hier sind die eToys weit
überlegen. Selbiges übrigens für #triggerEvent: etc.

Ob es aber "einfacher" ist, eine korrekte Implementation der Eventhandler zu
schreiben oder #on:send:to: zu benutzen kann man also bezweifeln.

Ciao,
  - Andreas