Gute Nachrichten, Leute. Jeder, der mit Arrays und Vektoren arbeitet - so, alle Entwickler - werden die neuen Möglichkeiten nutzen: Seit dem Flash-Build von August 2011 unterstützt der Realaxy ActionScript Editor (RASE) den neuen Sammlungen AS3-Spracherweiterung. In diesem Beitrag zeigen wir Ihnen, was es kann.
Eine Auflistung ist ein allgemeiner Begriff, der grob bedeutet, „eine Gruppe ähnlich gruppierter Objekte, die zusammengruppiert werden“. Zum Erstellen einer Sammlung in ActionScript 3.0 können Sie Arrays, Vektoren, Wörterbücher oder Objekte verwenden. Sie haben jeweils einige Voraussetzungen für ein perfektes Konzept. Wenn Sie jedoch nur eine grundlegende Kenntnis von modernen und trendigen Sprachen wie Scala, Groovy oder Ruby haben, werden Sie in der reinen AS3-Verarbeitung von Collections definitiv den Mangel an funktionalem Ansatz spüren.
Nun, lass uns das vorstellen Sammlungen AS3-Spracherweiterung, verfügbar in RASE Beta 10, Build 8177+.
Hier finden Sie ein komplettes Vokabular mit Methoden, die mit Beispielen ergänzt sind: eine für Listen und eine für Karten (dies sind Bilder; scrollen Sie nach unten, sie sind wirklich RIESIG)..
Um sich nicht in diesem Dschungel zu verlieren, werfen wir einen Blick auf einige einfache Anwendungsfälle. Das erste True-Life-Beispiel zeigt die Prägnanz des Erfassungscodes:
Wir schaffen ein Liste
, das kann nur enthalten int
Werte.
woher
?).wählen
?).wählen
?).Liste
und das Ergebnis verfolgen.Woher
, wählen
, selectMany
- Diese Vorgänge sind beim Erstellen einer Abfrage einfach zu verwenden.
Operationen wie alles
, irgendein
, enthältAll
, und enthält
perfekt in bedingten Sätzen arbeiten (?ob
? Anweisungen usw.).
Um eine Liste zu ändern, haben wir eine große Auswahl an Waffen: Löschen
, alles entfernen
, entfernenWo
, removeHead
, removeTail
, usw.
Für die Personen, die definitiv ein Auge für Perversion haben, haben wir eine Reihe von Operationen vorbereitet foldLeft
/foldRight
, links reduzieren
/reduziereRechts
, sich schneiden
, usw.
Einfach gesagt, es gibt viele Operationen, die für jeden Geschmack und fast jede Aufgabe geeignet sind. In einigen Vorgängen übertragen Sie einfach einen oder mehrere Werte, in anderen fügen Sie einen Abschluss hinzu.
Die Sammlungssprache ist absichtlich einfach. Es unterstützt zwei Arten: Liste
und Karte
. Karte
ist einem trivial sehr ähnlich Wörterbuch
das hält einige nützliche Methoden - Schlüssel
, Werte
, containsKey
, containsValue
(nützlich für Kontrollen und Bedingungen), pushMap
(um Werte zusammenzuführen), removeKey
, removeValue
, usw.
Karten sind intelligent und ausfallsicher. Sie können nicht zulassen, dass Sie einen falschen Schlüssel oder Wert hinzufügen:
Karten funktionieren gut mit Listen und Abfragen.
Es gibt auch Konvertierungsoperationen, die das Einbetten der neuen Collections-Erweiterungen in Ihr reines ActionScript-Projekt erleichtern. Nehmen Sie einfach ein triviales Array (oder einen Vektor) und wenden Sie das an .auflisten
Operation. Nachdem Sie eine Liste (oder eine Karte) bearbeitet haben, können Sie diese jederzeit mit zurück in den alten AS3-Stil konvertieren .toArray
oder .toVector
.
Um zu zeigen, wie Sie mit diesen Sammlungen beginnen können, finden Sie eine Schritt-für-Schritt-Anleitung, die auf einer trivialen Situation basiert. Angenommen, Sie erstellen eine Liste mit "vorgeschlagenen Benutzern" für einen Twitter-Account. Wir müssen eine sehr lange Sammlung von Hunderten oder Tausenden von Objekten verarbeiten, um eine kurze Liste (die einer Reihe von Kriterien entspricht) abzurufen und auf jedes Element in dieser kurzen Liste eine Operation anzuwenden.
Wir werden uns nicht auf die Interaktion mit der Twitter-API konzentrieren, da wir nur zeigen möchten, wie Sie mit der Sammlungen Sprache zu zeigen und die Vorteile eines funktionalen Ansatzes bei der Arbeit mit Sammlungen in AS3 aufzuzeigen.
Erstellen Sie ein neues Projekt von Grund auf und nennen Sie es Collections. Wenn dies Ihre erste Erfahrung mit dem Editor ist, empfehlen wir Ihnen, das HelloWord-Lernprogramm und / oder die Übersicht für Anfänger zu lesen.
Jetzt müssen wir drei Klassen erstellen, um die Datenstruktur zu speichern: Nutzer
,яTwitterKonto
und Botschaft
. Wir können es vom tun Generieren
Menü, das durch Klicken mit der rechten Maustaste auf den Code oder Drücken von verfügbar ist Strg + N.
Geben Sie den Klassennamen in ein Popup-Feld ein.
Springe zu theя<
Position und TrefferEingeben
.
Fügen Sie folgende Felder hinzu: Nutzername
, Nachname
und Ich würde
. Der Code sieht so aus:
Rufen Sie die Strg + N wieder Menü.
Ein neues Popup-Fenster wird angezeigt. Wählen Sie alle neu erstellten Felder aus und drücken Sie OK.
.toString ()
MethodeVergessen Sie nicht, dem Text eine Textpräsentation hinzuzufügen Nutzer
Klasse. Hinzufügen .toString ()
Methode - Punkt 5 von theяCtrl-N Menü (wie bei Screenshot zu Schritt 2 und 6).
Das Nutzer
Klasse ist fertig. Sein Code wird so aussehen:
Mit dem gleichen Verfahren wie in den Schritten 2-9 müssen Sie erstellenTwitterKonto
яandяBotschaft
Klassen.
я
Hinweis: Um einen Typfehler (wie im obigen Bild gezeigt) zu vermeiden, müssen Sie den importieren Sammlungen
Sprache von theяStrg + L Speisekarte:
NB2: яThe TwitterKonto
und Botschaft
Diese Klassen sollten vernetzt sein. Damit dies geschehen kann, muss nach dem Import der Sammlungen
Sprache müssen Sie die erstellen Botschaft
Klasse, spring zurück zum TwitterKonto
Klasse und vervollständigen Sie die Zeile, die einen Fehler verursacht hat.
NB3: Vergessen Sie nicht, Getter, Setter und ein .toString ()
Methode.
Jetzt ist es Zeit, etwas Code in zu schreiben Main()
. Zuerst müssen wir einige Felder hinzufügen
Hinweis: Verwenden Sie die Tastenkombination "theSmart Complete" (Ctrl-Shift-Space), um beim Schreiben dieser Sätze etwas Zeit zu sparen:
Da unser Tutorial nur eine Demo ist, die zeigt, wie mit Sammlungen in AS3 gearbeitet wird, überspringen wir den Teil, der darauf hinweist, wie diese Daten aus der Twitter-API abgerufen werden können.
Stellen wir uns vor, dass wir bereits haben:
Anhänger
,яgefolgt
,KandidatenLongList
,BewerberShortList
, was im Moment leer ist.Die dritte Sammlung kann extrem groß sein und Hunderte oder sogar Tausende von Gegenständen enthalten. Unser Ziel ist es, eine anspruchsvolle Frage zu stellen und so die überflüssigen Gegenstände nach dem Prinzip von Buonarotti abzuschneiden. Ich sah den Engel im Marmor und schnitzte, bis ich ihn befreite.?
Springen zu Main()
яkonstruktor, und geben Sie theя einKandidatenLongList
mit seiner Methode ?woher
? (schlagen Ctrl-Space Verwenden Sie die automatische Vervollständigung wie in der Abbildung unten):
Der folgende Satz erscheint:
Sei nicht überrascht, es ist nur eine Schließung
, und "es
"ist nur sein Parameter.
Ein Abschluss ist tatsächlich dieselbe anonyme Funktion, jedoch mit einigen kleinen Unterschieden.
Zuerst die Schließung
hat eine sehr kurze Syntax. Parameter haben keine Typdeklaration (um genau zu sein, sie haben sie, aber solche Deklarationen sind verborgen). Der Abschluss hat ein besonderes Verhalten - die letzte Anweisung ist ein Rückgabewert & rdquo - was bedeutet, dass Sie dies verwenden sollten ?1;
? (in der letzten Zeile) statt ?Rückkehr 1;
?
Zweitens hat es eine besondere Sicht auf einzeilige Verschlüsse - bei einem solchen Verschluß wird ein Semikolon am Ende weggelassen (aus zwei Gründen: Lesbarkeit und Kürze).
Im Gegensatz zu einer anonymen Funktion (und auch als Widerspruch zu den oben genannten Arrays
und Vektoren
) ist eine Schließung typ sicher. Das bedeutet, dass Autocomplete und Typprüfung in Schließungen funktionieren.
Zum Abschluss a Schließung
ist eine Art Funktion bei Steroiden. Es hat viele leckere Funktionen, die uns helfen, alles schnell und prägnant zu schreiben.
Kehren wir zu unserem unvollendeten Abschluss zurück. Fügen Sie Code hinzu, der unsere "Regeln" implementiert. Dieser Code gibt eine reduzierte Version von zurück KandidatenLongList
das schließt keinen unserer Anhänger ein:
Dann fügen Sie ein weiteres Kriterium hinzu:
Theoretisch ist das Sammlungen Mit der Sprache können Sie viele verschiedene Bedingungen nacheinander verschachteln. Fügen Sie ein weiteres Kriterium hinzu (schließen Sie Benutzer ein, die "Flash", "ActionScript" oder "Adobe" in ihrem Feld "Biografie" haben), indem Sie einen regulären Ausdruck verwenden:
Wählen Sie die gesamte Abfrage aus und drücken Sie Strg-Alt-V. Eine neue Variable wird eingeführt.
Jetzt können wir machen, was wir wollen:
Wir würden dann den Inhalt von kopieren Ergebnis
in BewerberShortList
.
Baue ein Modul mit Strg-F9 und schau dir das an Ausgabe Fenster. Der generierte reine AS3-Code von Main()
sieht so aus:
Paket com.example import com.realaxy.actionScript.collections.util.CollectionsLanguageUtil; import flash.display.Sprite; public class Main erweitert Sprite private var followers: Array = new Array (); private var followBefore: Array = neues Array (); private var candysLongList: Array = neues Array (); private var candlesShortList: Array = neues Array (); public function Main () // schließt unsere Follower und Benutzer aus, die // vor uns // gefolgt wurden, und schließt Personen mit "Flash", "ActionScript" und "Adobe" in ihre Biobilder ein // // fügt sie alle in die Empfehlungen-Auswahlliste this.candidatesShortList = CollectionsLanguageUtil ein .where (CollectionsLanguageUtil.where (KandidatenLongList, Funktion (n: TwitterAccount, stoppt: Objekt): Boolean return! CollectionsLanguageUtil.any (Anhänger, Funktion (f: TwitterAccount, stoppt: Objekt): Boolean return f.user.id! = n.user.id;, this, false) &&! CollectionsLanguageUtil.any (folgtBefore, Funktion (f: TwitterAccount, stoppt: Object): Boolean return f.user.id! = n.user.id;, this, false);, this, false), Funktion (it: TwitterAccount, stoppt: Object): Boolean return /Flash|ActionScript|Adobe/.test(it.bio);, this, false); var names: Array = CollectionsLanguageUtil.select (KandidatShortList, Funktion (it: TwitterAccount, stoppt: Object): String return it.user.username + "," + it.user.surname;, this, false); CollectionsLanguageUtil.forEach (Namen, Funktion (m: String, stoppt: Objekt): void // TODO: etwas mit 'm', this, false);
Scheint ein wenig unleserlich, was? Besonders im Vergleich zu unserem DSL-Code:
Mit der neuen Spracherweiterung Collections können Sie: