Spørring (og Erobring) Store samlinger i AS3 Med Realaxy Editor

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.


< h2> Den samlinger Språk

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


    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

    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.



    Lister og kart

    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.



    A Real World Eksempel

    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.



    Trinn 1: Opprette et prosjekt

    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




    Trinn 2:. Opprette en klasse (Begynnelsen)

    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
    .




    Trinn 3 : Opprette en klasse (In Progress)

    Skriv klassenavnet i en pop-up boks




    Trinn 4:. Opprette en klasse ( Legge til felter)

    Gå til < < Field > > posisjon og trykk Enter




    Trinn 5:. Opprette en klasse (More Fields)

    Legg følgende felt: brukernavn, etternavn og id. Koden vil se slik ut:




    Trinn 6: Legge Getters og settere

    Påkall Ctrl + N
    menyen igjen




    Trinn 7:. Still Legge Getters og settere

    En ny pop-up vindu vil vises. Velg alle nyopprettede felt og trykk OK




    Trinn 8:. Legge til en .toString () Metode

    Ikke glem å legge en tekst presentasjon til bruker klassen. Legg .toString () -metoden - punkt 5 fra Ctrl-N
    menyen (samme som på skjermbildet til trinn 2 og 6)



    Trinn 9: Code Oversikt

    User klassen er klar. Sin kode vil se slik ut:




    Trinn 10: TwitterAccount og Melding Classes

    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
    menyen:


    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




    Trinn 11:. main ()

    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
    ) for å spare litt tid når du skriver disse setningene:
    < p>

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

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



      Trinn 12: Building Spørre

      Gå til main () konstruktør, og angi candidatesLongList med sin metode "hvor" (trykk på Ctrl-Space
      å bruke autofullføring som i skjermbildet nedenfor):
      < p>

      Følgende setning vises:


      Ikke bli overrasket, det er bare en nedleggelse, og "det" er bare dens parameter.



      Nedleggelser (en liten lyrisk digresjon)

      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
      . Det betyr at autofullfør og typesjekking vil fungere i nedleggelser.

      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



      Trinn 13:. Bygge Query

      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:




      Trinn 14: Innhenting resultat

      Velg hele søket og trykke på Ctrl-Alt-V
      . En ny variabel vil bli introdusert

      Nå er vi i stand til å gjøre hva vi vil.

      Vi vil deretter kopiere innholdet på resultatet i candidatesShortList



      Step. 15: Generering Pure AS3 Kode

      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:
      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); }}}

      Virker litt uleselig, eh? Spesielt sammenligne med våre DSL-kode:



      Konklusjon

      Den nye samlinger språket utvidelsen lar deg:

      forbedre AS3 kode som gjør det mer konsis,

      gjøre koden mer lesbar, og Selge
      letter snu sekvensiell kode i parallell kode.