Changes between Version 40 and Version 41 of squeak_faq


Ignore:
Timestamp:
01/13/2014 11:10:51 AM (10 years ago)
Author:
willi.mueller
Comment:

added iteration with collection protocoll

Legend:

Unmodified
Added
Removed
Modified
  • squeak_faq

    v40 v41  
    709709
    710710Leider muss man sich darum selbst kümmern, indem man die benötigten Tastencodes für jede Plattform herausfindet und dann anhand der Plattform, auf der die VM gerade läuft, entscheidet, welche Codes berücksichtigt werden sollen. Die Plattform kann man mit `Smalltalk os platformName` ermitteln (die Rückgabewerte sind z. B. `'mac os'`, `'Win32'` und `'unix'`). Eine Möglichkeit wäre, die Tastencodes auf der Klassenseite abzulegen und beim Zugriff darauf anhand der Plattform zu entscheiden, welcher der Codes zurückgegeben werden soll. Hier gibt es mehrere Varianten jeweils mit Vor- und Nachteilen (Plattform-Unterscheidung bei jedem Zugriff? Objekt mit aktuellen Codes anlegen? Wie sicherstellen, dass das richtige verwendet wird, wenn man das Image von einer Plattform zur anderen kopiert?). Überlegt, was sich für euer Projekt am besten eignet.
     711
     712=== Iterieren über Collections mit dem Collection-Protokoll ===
     713Wichtig ist, auch für die Klausur, dass ihr nicht ausschließlich `#do:` verwendet, um zu iterieren. Nutzt unbedingt die Möglichkeiten des Collection-Protokolls.
     714{{{
     715x := #(1 2 3 4 5).
     716b := x conform: [:a | (a >= 1) & (a <= 4)].                 "test if all elements meet condition"
     717y := x select: [:a | a > 2].                                "return collection of elements that pass test"
     718y := x reject: [:a | a < 2].                                "return collection of elements that fail test"
     719y := x collect: [:a | a + a].                               "transform each element for new collection"
     720y := x detect: [:a | a > 3] ifNone: [].                     "find position of first element that passes test"
     721sum := x inject: 10 into: [:a :c | a + c].                  "sum of elements + 10"
     722sum :=  fold: [:x :y | x + y ]                              "sum elements"
     723}}}
     724Beispiele mehrheitlich aus [http://wiki.squeak.org/squeak/5699 Terse Guide to Squeak].