Operator Overbelastning i AS3 Med Realaxy Editor
Del
Del
3
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
I forrige innlegg om Realaxy Editor vi snakket om Traits språket, som lar deg dra nytte av multippel arv. Nå slår vi til en annen bemerkelsesverdig mulighet. Operatør overbelastning
Realaxy Actionscript Editor (RASE) er tilgjengelig her (for Windows, Macintosh OS X og Linux). Merk: Hvis det er din første erfaring med redaktøren, kan du lese RASE how-to
intoduction
En av de viktigste funksjonene som er lagt til RASE beta 10 er operatør overbelastning støtte, slik at. utviklere å endre hvordan operatørene (*, +, etc) oppføre seg i ulike situasjoner. Denne funksjonen, samt multippel arv, er et objekt av en hellig krig mellom ivrige tilhengere av to ulike programmerings paradigmer
Fordelene ved overbelastning operatørene er åpenbare:.
Kode ser ofte mer naturlig. Veldefinert operatør er lettere å forstå og huske enn navnet på funksjonen en funksjon navn. For eksempel kombinere to variabler av typen Point du foretrekker å se noe sånt point1 + poeng2, men ikke point1.plus (poeng2).
Den virkelige argument mot operatøren overbelastning er den tapende av kontroll løpet koden din. Det er uklart, noen ganger, hvor en operatør er overbelastet, og der er det ikke. Legge til en overbelastet operatør påkaller endringer i oppførselen til eksisterende kode som kan føre til noen uventede konsekvenser.
Operatør overbelastning er ikke inkludert i Action (ECMA3) selv om det er foreslått for Standard ECMA4. Java ikke støtter operatør overbelastning, men begge Groovy ("Java med syntaktisk sukker") og Scala gjøre. Videre kan C # 's operatører bli overbelastet.
Man kan ikke si om det er en god eller dårlig ting. Men det er også praktisk talt trygg på at noen ganger er det en virtuell må-ha. For eksempel når kjeding flere matematiske operasjoner, operatør overbelastning virkelig gjør code mye mer konsis, og dermed forbedre din forståelse av hvordan det fungerer. Men nok teori - la oss se oss selv til å øve
Vi snakker om et språk skjøte overloadedOperators som ble introdusert i RASE siden Beta 10 (bygge 8145+)
En enkel måte å importere det (.. eller et annet språk) til prosjektet er å trykke Ctrl + L product: ( Cmd + L Forresten, overloadedOperators i RASE er bare en port av overloadedOperators språk fra JetBrains MPS-plattformen. Vi bestemte oss for ikke å finne opp hjulet og etter å ha undersøkt målet søknaden domenet, kom til den konklusjon at JetBrains løsningen ser ut til å være tilstrekkelig, og oppfyller alle våre behov. Vi har lagt til noen små bonusmateriale fra oss. Vi tror at dette er den rette måten for Språkorientert programmering som tar det beste fra andre språk og tilpasser den for egne behov. Les mer om dette senere i våre kommende artikler på etablering av språk utvidelser. Opprett et nytt prosjekt med en modul inne. Ring nye root "operatører". Legg noen kode for testing av hovedklassen. Her har vi laget to variabler, p1 og p2 (type Point). Nå vil vi gjerne få en tredje variabel, p3, som ville være et resultat av å kombinere disse to punktene Output disse tre verdier:. P1, p2, p3. Vi brukte uttrykk verdier fra språk logging for å gjennomføre streng beskjed til i konsollet Vår kode provoserer en feilmelding. "Operasjonen kan ikke brukes på disse operander". Kompilering er umulig. La oss erklære operatør overbelastning. . Import com.realaxy.actionScript.overloadedOperators Legg til en ny "OverlodedOperatorsContainer" root: høyreklikk på pakken node og velge mellom en pop-up menyen. Name it "MyOperators". Her ser vi to erklæring blokker:. "belastet binære operatorer" og "tilpassede operatører erklæringer" Flytt til den første blokken og trykk på Enter Velg "+" operator. Velg typen Point for begge sider. Still returverdi Point (endre den fra default "tomrommet" -innstillingen). Nå kan vi legge til en kode som ville bli henrettet på å kombinere Point med Point (med "+" operator). Det er alt. Den røde høydepunkt som indikert en feil i klassen vår har forsvunnet. Start kompilering. Opprett kjøre-konfigurasjon for vår modul. Vi får følgende melding på konsollen. La oss nå prøve å fullføre en litt mer sofistikert oppgave og re-definere drift av subtraksjon, multiplikasjon og divisjon. For både nummer og Point Tenk deg at du trenger å beregne et punkt som er plassert til venstre og ned ved 50 piksler fra midten av avstanden mellom de to punktene Dette er enkelt:. Eller enda enklere : Men ikke glem at i en Flasher virkelige liv ville det være som dette: Sammenlign disse tallene. Det er god nok grunn til å bruke operatør overbelastning i Action prosjekter. Nå la oss lære å lage våre egne operatører. Først tilbake til MyOperators erklæring og går til tilpassede operatører erklæringer. Trykk Enter Våre tilpasset operatøren har for å sjekke en streng for å matche et regulært uttrykk. For å beskrive en slik aktørs adferd vi legge til en ny overbelastning, akkurat som vi har gjort det 10 minutter siden med Point. Den eneste forskjellen er å legge ~ = å autofull. Den venstre operand må plukke opp en String, mens den rette må være RegExp. Returnere verdien bør være boolsk. Deretter legger noen kode som vil bli utført av vår operatør, ringer testmetode fra verdien. Lag en testdrift i Main () for å se hvordan det fungerer. Rask og enkel For å unngå forvirring i alle disse tilpassede operatører, du bør huske en eneste hurtigtast beslektet med navigasjon: Ctrl-B plakater (eller Ctrl + klikk En god hint. : å gjøre en forskjell mellom Reloaded operatør og en innebygd i ett, holder en mus på den og trykk på Ctrl Selvfølgelig, hvis du er på en Mac, kan du bruke La oss utvide oppførselen vår custom operatør med en ny funksjon, commutativity Velg operatør og trykk på Alt-Enter Fortsett til operatører erklæring. Satt kommutativ = sant. Den røde feilPunktet bør forsvinne (noen ganger du skal trykke F5 for å oppdatere utsikt). I andre ord, dette er "kommutativ" -innstillingen en god gammel regel som å endre rekkefølgen på summands ikke endrer summen . Nå vil vår ~ = operatør fortsatt fungere hvis vi setter RegExp før String. OOP guruer advare mot using denne atferden. Noen ganger innebærer det uventede effekter. La oss ta det på tro og huske det. Det er alt som skal til. Vi har operatøren overbelastning i Actionscript 3.
) innen Realaxy Editor.
Trinn 1
Trinn 2
Trinn 3
Trinn 4
Trinn 5
Trinn 6
Trinn 7
. En ny operatør erklæring er lagt til.
Trinn 8
Trinn 9
Trinn 10
Trinn 11
< p> Angi hovedklassen (hvis du ikke hadde gjort det tidligere)
Trinn 12
Step 13
operatør + (Point, Point) - >.; Pointcommutative: false (venstre, høyre) - > Point {return new Point (left.x + right.x, left.y + right.y);} operatør + (Point, Number) - > Pointcommutative: false (venstre, høyre) - > Point {return new Point (left.x + høyre, left.y + høyre);} operatør - (Point, Point) - > Pointcommutative: false (venstre, høyre) - > Point {return new Point (left.x - right.x, left.y - right.y);} operatør - (Point, Number) - > Pointcommutative: false (venstre, høyre) - > Point {return new Point (left.x - høyre, left.y - høyre);} operatør * (Point, Point) - > Pointcommutative: false (venstre, høyre) - > Point {return new Point (left.x * right.x, left.y * right.y);} operatør * (Point, Number) - > Pointcommutative: false (venstre, høyre) - > Point {return new Point (left.x * høyre, left.y * høyre);} operatør /(Point, Point) - > Pointcommutative: false (venstre, høyre) - > Point {return new Point (left.x /right.x, left.y /right.y);} operatør /(Point, Number) - > Pointcommutative: false (venstre, høyre) - > Point {return new Point (left.x /høyre, left.y /høyre);}
Trinn 14
Step 15
å opprette en ny erklæring. Visuell presentasjon ville være ~ =.
Step 16
Trinn 17
på en operatør) vil lede deg til operatørens erklæring
stedet for Ctrl.
Trinn 18
.
. Velg Flip Binary Betjening fra en pop-up menyen. Dette vil bytte de to sidene, men med en feilmelding, fordi ~ = operatør ennå ikke er definert for slike operander.
advarsel