Querying (og Erobring) Store samlinger i AS3 Med Realaxy Editor
Del
Del
en
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
Gode nyheter, alle sammen. Alle som arbeider med matriser og vektorer - så, alle utviklere Z - vil nyte de nye mulighetene: siden sent August 2011 build av Flash, Realaxy Actionscript Editor (RASE) støtter den nye samlinger AS3 språk forlengelse. I dette innlegget vil vi vise deg hva den kan gjøre. En samling er et generelt begrep som betyr omtrent ", en haug med tilsvarende maskinskrevne gjenstander som er gruppert sammen". Bygge en samling i Actionscript 3.0 kan gjøres ved hjelp av matriser, vektorer, ordbøker, eller gjenstander; de hver har noen av makings av en perfekt konsept. Men hvis du har selv en grunnleggende kjennskap til hvilken som helst moderne og trendy språk som Scala, Groovy eller Ruby, vil du definitivt føle mangelen på en funksjonell tilnærming i ren AS3-veis av prosess samlinger. Vel, la oss introdusere samlinger AS3 språkutvidelse som er tilgjengelig i RASE Beta 10, bygge 8177+ En komplett vokabular av metoder supplert med prøver er tilgjengelig her.: en for lister og en annen for kart (dette er bilder, bla dem ned, de er virkelig stort). For å ikke gå seg vill i denne jungelen, la oss ta en titt på noen enkle bruksmåter. Den første virkelige prøven viser knapphet på samlingen kode. Vi lager en liste, som kan inneholde bare int verdier Hvor velger, selectMany -.. disse operasjonene er enkle å bruke når du bygger en spørring Operasjoner som alle, alle , containsAll, og inneholder fungerer perfekt i betingede setninger ("hvis" uttalelser, etc) Hvis du vil endre en liste, har vi et bredt utvalg av våpen. fjerne, RemoveAll, removeWhere, removeHead, removeTail, etc. For de personer som definitivt har et øye for perversjon vi har forberedt en haug med operasjoner som foldLeft /foldRight, reduceLeft /reduceRight, krysser hverandre, etc. Enkelt sagt, det er nok av operasjoner egnet til hver fancy og nesten hver oppgave. I enkelte operasjoner du bare sende én eller flere verdier til det, i noen andre som du legger til en nedleggelse. Samlingen språket er forsettlig enkel. Den støtter to typer: Liste og kart. Kartet er ganske lik en triviell ordbok som inneholder noen nyttige metoder - nøkler, verdier, containsKey, containsValue (nyttig for sjekker og betingelser), pushMap (å fusjonere verdier), removeKey, removeValue, etc. Maps er smart og fail-safe. De vil ikke la deg legge inn feil nøkkel eller verdi. Maps fungerer bra med noen lister og spørringer Det er også konvertering operasjoner som kan benyttes for å lette bygge de nye samlinger utvidelser til din faktiske ren-Action prosjektet. Bare ta en triviell array (eller vektor) og påfør .toList drift. Etter behandling av en liste (eller et kart) kan du alltids konvertere den tilbake til den gamle skolen AS3 stil med .toArray eller .toVector. For å demonstrere hvordan komme i gang med disse samlingene, her er en steg-for-steg guide basert på en triviell situasjon. Anta at din oppgave er å skape en "foreslåtte brukere" -listen for en Twitter-konto. Vi må behandle en svært lang samling av hundrevis eller tusenvis av gjenstander, for å hente en kort liste (som samsvarer med en rekke kriterier) og å bruke noen operasjon på hvert element i den korte listen. Vi ikke vende oppmerksomheten mot samspill med Twitter API, ettersom vårt mål er bare å vise hvordan du kommer i gang med samlinger språk og å vise fordelene ved en funksjonell tilnærming i arbeidet med samlinger i AS3. Opprett et nytt prosjekt fra scratch og endre navn til samlinger. Hvis dette er din første erfaring med redaktøren, anbefaler vi deg å lese Realaxy HelloWord Tutorial og /eller Realaxy Oversikt For Beginners Nå må vi lage tre klasser for å lagre datastrukturen: Bruker, TwitterAccount og Melding. Vi kan gjøre det fra Generer menyen, som er tilgjengelig via høyreklikke koden eller trykke Ctrl + N Skriv klassenavnet i en pop-up boks Gå til < < Field > > posisjon og trykk Enter Legg følgende felt: brukernavn, etternavn og id. Koden vil se slik ut: Påkall Ctrl + N En ny pop-up vindu vil vises. Velg alle nyopprettede felt og trykk OK Ikke glem å legge en tekst presentasjon til bruker klassen. Legg .toString () -metoden - punkt 5 fra Ctrl-N User klassen er klar. Sin kode vil se slik ut: Ved hjelp av den samme prosessen som trinn 2-9 du må skape TwitterAccount og Melding klasser NB:. For å unngå en type feil (som vist på bildet over), må du importere samlinger språk fra Ctrl + L NB2: The TwitterAccount og Melding klasser bør være tverrbundet. For at dette skal skje, etter import Samlinger språk, må du opprette Budskapet klassen, hoppe tilbake til TwitterAccount klasse og fullføre linjen som forårsaket en feil. NB3: Ikke glem å legge getters, settere og en .toString () -metoden Nå er det på tide å skrive noen kode i main (). Først må vi legge noen felt. NB: Bruk Smart Komplett tastatursnarveien ( Ctrl-Shift-Space Siden vår tutorial er bare en demo som viser en hvordan du arbeider med samlinger i AS3, vil vi hoppe over den delen som refererer hvordan du får denne informasjonen fra Twitter API. Den tredje samlingen kan være ekstremt store, som inneholder hundrevis eller tusenvis av elementer. . Vårt mål er å bruke litt sofistikert søket og dermed å avskjære unødvendige elementer i henhold til Buonarotti prinsipp "Jeg så engelen i marmor og skåret før jeg satt ham fri." Gå til main () konstruktør, og angi candidatesLongList med sin metode "hvor" (trykk på Ctrl-Space Følgende setning vises: Ikke bli overrasket, det er bare en nedleggelse, og "det" er bare dens parameter. En nedleggelse er faktisk den samme anonym funksjon, men med en rekke små forskjeller. Først har Closure en veldig konsis syntaks. Parametre har ikke en type erklæring (for å være mer presis, de har det, men slike erklæringer er skjult). Nedleggelsen har en spesiell atferd - "den siste setningen er en returverdi & rdquo - som betyr at du bør bruke" 1; "(i siste linje) i stedet for" return 1; " For det andre har det en spesialvisning for én linje nedleggelser - på en slik nedleggelse semikolon på slutten er utelatt (for to grunner: lesbarhet og kortfattethet) I motsetning til en anonym funksjon (og også som en motvekt til den. nevnte Arrays og vektorer), er en nedleggelse typen trygt For å konkludere, en Closure er en slags funksjon på steroider. Den har en rekke smakfulle funksjoner som hjelper oss til å skrive alt rask og konsis La oss vende tilbake til vårt uferdig nedleggelse. Legg noen kode som vil gjennomføre våre "regler". Denne koden vil returnere en cut-down versjon av candidatesLongList som ikke inkluderer noen av våre følgere: Deretter legger et annet kriterium: Teoretisk Samlinger språket kan du hekker en rekke ulike forhold en etter en. La oss legge til en mer kriterium (inkluderer brukere som har "Flash", "Action" eller "Adobe" i sin biografi felt) ved hjelp av et vanlig uttrykk: Velg hele søket og trykke på Ctrl-Alt-V Nå er vi i stand til å gjøre hva vi vil. Vi vil deretter kopiere innholdet på resultatet i candidatesShortList Bygg en modul med Ctrl-F9 Hotell og ta en titt på Output-vinduet. Den genererte ren AS3 code of Main () vil se slik ut: Virker litt uleselig, eh? Spesielt sammenligne med våre DSL-kode: Den nye samlinger språket utvidelsen lar deg:
< h2> Den samlinger Språk
Så velger vi kun de som oppfyller en betingelse ("der").
Vi gjør noe med hvert plukket element ("select").
Vi konvertere dem til Strings ("select").
Til slutt, vi bla gjennom listen og spore resultatet
Lister og kart
A Real World Eksempel
Trinn 1: Opprette et prosjekt
Trinn 2:. Opprette en klasse (Begynnelsen)
.
Trinn 3 : Opprette en klasse (In Progress)
Trinn 4:. Opprette en klasse ( Legge til felter)
Trinn 5:. Opprette en klasse (More Fields)
Trinn 6: Legge Getters og settere
menyen igjen
Trinn 7:. Still Legge Getters og settere
Trinn 8:. Legge til en .toString () Metode
menyen (samme som på skjermbildet til trinn 2 og 6)
Trinn 10: TwitterAccount og Melding Classes
menyen:
Trinn 11:. main ()
) for å spare litt tid når du skriver disse setningene:
< p>
< p> La oss bare tenke oss at vi allerede har:
en liste over våre følgere, etter
en liste over brukere followedBefore, etter
en svært lang liste over potensielle kandidater for følgende - candidatesLongList, etter
og, selvfølgelig, en candidatesShortList, som er tom for øyeblikket
Trinn 12: Building Spørre
å bruke autofullføring som i skjermbildet nedenfor):
< p>
Nedleggelser (en liten lyrisk digresjon)
. Det betyr at autofullfør og typesjekking vil fungere i nedleggelser.
Trinn 13:. Bygge Query
Trinn 14: Innhenting resultat
. En ny variabel vil bli introdusert
Step. 15: Generering Pure AS3 Kode
pakken com.example {import com.realaxy.actionScript.collections.util.CollectionsLanguageUtil; import flash.display.Sprite; public class Hoved strekker Sprite {private Var etterfølgere: Array = new Array (); private Var followedBefore: Array = new Array (); private Var candidatesLongList: Array = new Array (); private Var candidatesShortList: Array = new Array (); offentlig funksjon main () {//utelukke våre følgere og brukere fulgt av oss før //inkludere mennesker med "Flash", "Action" og "Adobe" i sin bio //legge dem alle til anbefalingene shortlist this.candidatesShortList = CollectionsLanguageUtil .Hvor (CollectionsLanguageUtil.where (candidatesLongList, funksjon (n: TwitterAccount, stopper: Object): Boolean {return CollectionsLanguageUtil.any (etterfølgere, funksjon (f: TwitterAccount, stopper: Object): Boolean {return f.user.id! = n.user.id;}, denne, false) & & CollectionsLanguageUtil.any! (followedBefore, funksjon (f: TwitterAccount, stopper: Object): Boolean {return f.user.id = n.user.id!;}, denne, false);}, denne, false), funksjon (det: TwitterAccount, stopper: Object): Boolean {return /Flash|ActionScript|Adobe/.test(it.bio); }, Dette, false); Var navn: Array = CollectionsLanguageUtil.select (candidatesShortList, funksjon (det: TwitterAccount, stopper: Object): String {return it.user.username + "," + it.user.surname;}, denne, false); CollectionsLanguageUtil.forEach (navn, funksjon (m: String, stopper: Object): void {//TODO: gjøre noe med 'm'}, dette, false); }}}
Konklusjon
forbedre AS3 kode som gjør det mer konsis,
gjøre koden mer lesbar, og Selge
letter snu sekvensiell kode i parallell kode.