Abfragen (und Erobern) großer Sammlungen in AS3 mit dem Realaxy Editor

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.


Die Sammlungssprache

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.

  1. Dann wählen wir nur diejenigen aus, die eine Bedingung erfüllen (?woher?).
  2. Wir machen mit jedem ausgewählten Element etwas (?wählen?).
  3. Wir konvertieren sie in Strings (?wählen?).
  4. Zum Schluss radeln wir durch die 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.


Listen und Karten

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.


Ein reales Beispiel

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.


Schritt 1: Ein Projekt erstellen

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.



Schritt 2: Erstellen einer Klasse (Beginn)

Jetzt müssen wir drei Klassen erstellen, um die Datenstruktur zu speichern: NutzerTwitterKonto 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.



Schritt 3: Erstellen einer Klasse (in Bearbeitung)

Geben Sie den Klassennamen in ein Popup-Feld ein.



Schritt 4: Klasse erstellen (Felder hinzufügen)

Springe zu theя<>Position und TrefferEingeben.



Schritt 5: Erstellen einer Klasse (Weitere Felder)

Fügen Sie folgende Felder hinzu: Nutzername, Nachname und Ich würde. Der Code sieht so aus:



Schritt 6: Hinzufügen von Gettern und Setters

Rufen Sie die Strg + N wieder Menü.



Schritt 7: Hinzufügen von Gettern und Setters

Ein neues Popup-Fenster wird angezeigt. Wählen Sie alle neu erstellten Felder aus und drücken Sie OK.



Schritt 8: Hinzufügen eines .toString () Methode

Vergessen 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).



Schritt 9: Code-Übersicht

Das Nutzer Klasse ist fertig. Sein Code wird so aussehen:



Schritt 10: TwitterAccount und Nachrichtenklassen

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 BotschaftDiese 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.



Schritt 11: яMain ()

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:

  1. eine liste von ourяAnhänger
  2. eine Liste von Benutzern gefolgt,
  3. eine sehr lange Liste potenzieller Kandidaten für die Teilnahme - KandidatenLongList,
  4. und natürlich aя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.?


Schritt 12: Erstellen der Abfrage

Springen zu Main()яkonstruktor, und geben Sie theя einKandidatenLongListmit 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.


Schließungen (ein kleiner lyrischer Exkurs)

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.


Schritt 13: Erstellen der Abfrage

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:



Schritt 14: Das Ergebnis erhalten

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.


Schritt 15: Reiner AS3-Code generieren

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:


Fazit

Mit der neuen Spracherweiterung Collections können Sie:

  • Verbessern Sie Ihren AS3-Code, um ihn übersichtlicher zu gestalten,
  • machen Sie Ihren Code lesbarer, und
  • Erleichtern Sie die Umwandlung Ihres sequentiellen Codes in parallelen Code.