Introduktion till ActionScript 3.0

ActionScript

ActionScript är programmeringsspråket för körningsmiljöerna Adobe® Flash® Player och Adobe® AIR™. Med det här språket möjliggörs samverkan, datahantering och mycket mera i Flash-, Flex- och AIR-innehåll och program.

ActionScript körs i ActionScripts virtuella motor (AVM), som ingår i Flash Player och AIR. ActionScript-kod omformas vanligtvis till bytekodformat av en kompilator. ( Bytekod är en typ av programmeringsspråk som skrivs och tolkas av datorer.) Exempel på kompilatorer är den som är inbyggd i Adobe® Flash® Professional och den som är inbyggd i Adobe® Flash® Builder™ och som är tillgängliga i Adobe® Flex™ SDK. Bytekoden är inbäddad i SWF-filer, som körs av Flash Player och AIR.

ActionScript 3.0 är en robust programmeringsmodell som är bekant för utvecklare med grundläggande kunskaper i objektorienterad programmering. Nedan beskrivs några av huvudfunktionerna i ActionScript 3.0 som utgör förbättringar av tidigare ActionScript-versioner:

  • En ny ActionScript Virtual Machine som heter AVM2, som använder en ny bytecode-instruktionsuppsättning och som ger stora prestandaförbättringar

  • En mer modern kompilatorkodbas som utför djupare optimeringar än tidigare versioner av kompilatorn

  • Ett utökat och förbättrat programmeringsgränssnitt (API), med lågnivåkontroll av objekt och en äkta objektorienterad modell

  • Ett XML API baserat på specifikationen ECMAScript för XML (E4X) (ECMA-357 utgåva 2). E4X är ett språktillägg till ECMAScript som infogar XML som intern datatyp för språket.

  • En händelsemodell som baseras på händelsespecifikation DOM (Document Object Model) Nivå 3

Fördelar med ActionScript 3.0

ActionScript 3.0 har större skriptmöjligheter än tidigare versioner av ActionScript. Detta gör att det blir enklare att skapa komplexa program med stora dataserier och objektorienterade, återanvändbara kodbaser. ActionScript 3.0 krävs inte för innehåll som körs i Adobe Flash Player. Det medger dock prestandaförbättringar som bara är tillgängliga via AVM2 (den virtuella motorn för ActionScript 3.0). ActionScript 3.0-kod kan köras upp till tio gånger fortare än äldre ActionScript-kod.

Den tidigare versionen av ActionScript Virtual Machine, AVM1, kör ActionScript 1.0- och ActionScript 2.0-kod. Flash Player 9 och 10 har stöd för AVM1 för bakåtkompatibilitet.

Nyheter i ActionScript 3.0

ActionScript 3.0 innehåller många klasser och funktioner som liknar de i ActionScript 1.0 och ActionScript 2.0. ActionScript 3.0 är dock arkitektoniskt och begreppsmässigt annorlunda än tidigare versioner av ActionScript. I ActionScript 3.0 finns nya funktioner i huvudspråket och ett förbättrat API, som ger ökad kontroll över lågnivåobjekt.

Huvudspråksfunktioner

Huvudspråket är grundstenarna i programmeringsspråket, till exempel programsatser, uttryck, villkor, slingor och typer. ActionScript 3.0 innehåller många funktioner som bidrar till att utvecklingsarbetet går fortare.

Körningsundantag

ActionScript 3.0 rapporterar fler feltillstånd än tidigare versioner av ActionScript. Körningsundantag används för vanliga feltillstånd och förbättrar felsökningen, vilket gör att du kan utveckla program som hanterar fel på ett robust sätt. Körningsfel kan förse stackkalkeringar med källfils- och radnummerinformation, vilket gör att du snabbt kan definiera felen.

Körningstyper

I ActionScript 3.0 bevaras typinformation vid körning. Den här informationen används för att utföra typkontroller vid körning, vilket förbättrar systemets typsäkerhet. Typinformation används också för att representera variabler i interna beteckningar, vilket förbättrar prestanda och minskar minnesanvändningen. Som jämförelse är typanteckningar i ActionScript 2.0 huvudsakligen en utvecklarhjälp, och alla värden skrivs dynamiskt vid körning.

Fasta klasser

ActionScript 3.0 omfattar begreppet fasta klasser. En fast klass har bara den fasta uppsättning egenskaper och metoder som definieras vid kompileringen, och ytterligare egenskaper och metoder kan inte läggas till. Eftersom det inte går att ändra en klass vid körning blir kontrollen vid kompilering striktare, vilket skapar mer robusta program. Det förbättrar också minnesanvändningen genom att det inte behövs någon intern hashtabell för varje objektinstans. Dynamiska klasser kan också användas med nyckelordet dynamic . Alla klasser i ActionScript 3.0 är som standard fasta, men de kan förklaras vara dynamiska med nyckelordet dynamic .

Metodslut

Med ActionScript 3.0 kan ett metodslut automatiskt komma ihåg sin ursprungliga objektinstans. Den här funktionen är användbar vid händelsehantering. I ActionScript 2.0 kommer metodslut inte ihåg vilken objektinstans de extraherats från, vilket leder till oväntat beteende när metodslutet anropas.

ECMAScript för XML (E4X)

ActionScript 3.0 implementerar ECMAScript för XML (E4X), nyligen standardiserat som ECMA-357. E4X har en naturlig, flytande uppsättning språkkonstruktioner för manipulering av XML. I motsats till traditionellt XML-analyserande API:er fungerar XML med E4X som en intern datatyp av språket. E4X effektiviserar utvecklingen av program som ändrar XML genom att mängden kod som krävs drastiskt minskas.

Om du vill läsa ECMA:s E4X-specifikation går du till www.ecma-international.org .

Reguljära uttryck

ActionScript 3.0 innehåller internt stöd för reguljära uttryck så att du snabbt kan söka efter och redigera strängar. ActionScript 3.0 implementerar stöd för reguljära uttryck som definierats i språkdefinitionen ECMAScript utgåva 3 (ECMA-262).

Namnutrymmen

Namnutrymmen liknar de traditionella åtkomstspecifikationssymboler som används för att kontrollera visning av deklarationer ( public , private , protected ). De fungerar som anpassade åtkomstspecifikationssymboler, och du kan ge dem vilka namn som helst. Namnutrymmen är utrustade med en URI (Universal Resource Identifier) för att undvika kollisioner, och de används också för att representera XML-namnutrymmen när du arbetar med E4X.

Nya primitiva typer

ActionScript 3.0 innehåller tre numeriska typer: Number, int och uint. Number representerar flyttal med dubbel precision. Typen int är ett 32-bitars heltal med tecken som låter ActionScript-koden dra fördel av CPU:ns snabba heltalsmatematikprocessor. Typen int är användbar för slingräknare och variabler där heltal används. Typen uint är ett 32-bitars heltal utan tecken som är användbar för bland annat RGB-färgvärden och byte-räknare. ActionScript 2.0 har däremot bara en enda numerisk typ, Number.

API-funktioner

API:erna i ActionScript 3.0 innehåller många klasser som du använder för att styra objekt på låg nivå. Språkets arkitektur är mer intuitiv än i tidigare versioner. Det finns för många klasser för att beskriva alla i detalj, men en del skillnader bör uppmärksammas.

DOM3-händelsemodell

Händelsemodellen DOM3 (Document Object Model Level 3) utgör en standardmetod för att generera och hantera händelsemeddelanden. Den här händelsemodellen är utformad för att tillåta objekt i program att samverka och kommunicera, bibehålla sina tillstånd och svara på förändringar. ActionScript 3.0-händelsemodellen bygger på World Wide Web Consortiums specifikationer för DOM Level 3-händelser. Den här modellen är tydligare och mer effektiv än de händelsesystem som fanns i tidigare versioner av ActionScript.

Händelser och felhändelser finns i paketet flash.events. Flash Professional-komponenterna och Flex-ramverket använder samma händelsemodell, vilket innebär att Flash Platform har ett enhetligt händelsesystem.

API för visningslista

API:n för åtkomst till visningslistan (det träd som innehåller alla visuella element i programmet) består av klasser som används vid arbete med visuella primitiver.

Klassen Sprite är utformad som en basklass för visuella element, som komponenterna i användargränssnittet. Klassen Shape representerar råvektorformer. Dessa klasser kan instansieras naturligt med operatorn new och kan när som helst omplaceras dynamiskt.

Djupet hanteras automatiskt. Metoder finns för angivande och hantering av objekts staplingsordning.

Hantera dynamiska data och innehåll

ActionScript 3.0 innehåller mekanismer för inläsning och hantering av resurser och data i dina program; mekanismer som är intuitiva och konsekventa över hela API:n. Med klassen Loader får du en mekanism för inläsning av SWF-filer och bildresurser samt ett sätt att komma åt detaljerad information om inläst innehåll. Med klassen URLLoader får du en separat mekanism för inläsning av text och binära data i datastyrda program. Med klassen Socket får du ett medel att läsa och skriva binära data till serversocketar i valfritt format.

Åtkomst till lågnivådata

Via olika API:er får du lågnivååtkomst till data. För data som laddas ned ger klassen URLStream åtkomst till data som binära rådata under tiden de laddas ned. Med klassen ByteArray kan du optimera läsning, skrivning och arbete med binära data. Ljud-API:n ger detaljkontroll över ljud via klasserna SoundChannel och SoundMixer. API:er som hanterar säkerhet ger information om säkerhetsbehörighet för en SWF-fil eller inläst innehåll, så att du kan hantera säkerhetsfel.

Arbeta med text

ActionScript 3.0 innehåller ett flash.text-paket för alla textrelaterade API:er. Klassen TextLineMetrics ger detaljerade mått för en textrad i ett textfält. Klassen ersätter metoden TextFormat.getTextExtent() i ActionScript 2.0. Klassen TextField innehåller lågnivåmetoder som tillför speciell information om en textrad eller ett enstaka tecken i ett textfält. Metoden getCharBoundaries() returnerar till exempel en rektangel som representerar ett teckens begränsningsram. Metoden getCharIndexAtPoint() returnerar index för tecknet vid en viss punkt. Metoden getFirstCharInParagraph() returnerar index för det första tecknet i ett stycke. Radnivåmetoderna är getLineLength() , som returnerar antalet tecken i en angiven textrad, samt getLineText() , som returnerar texten på den angivna raden. Klassen Font används för att hantera inbäddade teckensnitt i SWF-filer.

Med klasserna i flash.text.engine-paketet för Flash-textmotorn får du ännu bättre lågnivåkontroll över text. De här klasserna ger lågnivåkontroll över text och har utformats för att skapa ramverk och komponenter för text.