Inleiding tot ActionScript 3.0

Informatie over ActionScript

ActionScript is de programmeertaal voor de runtimeomgevingen van Adobe® Flash® Player en Adobe® AIR™. Het maakt interactiviteit, gegevensverwerking en nog veel meer mogelijk in Flash-, Flex- en AIR-inhoud en -toepassingen.

ActionScript wordt uitgevoerd met de ActionScript Virtual Machine, een onderdeel van Flash Player en AIR. ActionScript-code wordt normaal gezien door een compiler getransformeerd naar een bytecodeformaat. (Bytecode is een soort programmeringstaal die geschreven en begrepen wordt door computers.) Voorbeelden van compilers zijn degene die ingebouwd zijn in Adobe® Flash® Professional en in Adobe® Flash® Builder™ en beschikbaar is in Adobe® Flex™ SDK. De bytecode is ingesloten in SWF-bestanden, die worden uitgevoerd door Flash Player en AIR.

ActionScript 3.0 biedt een krachtig programmeermodel dat ontwikkelaars met een basiskennis van objectgeoriënteerd programmeren vertrouwd zal lijken. Enkele belangrijke functies van ActionScript 3.0 die een verbetering zijn ten opzichte van oudere versies van ActionScript zijn de volgende:

  • Een nieuwe ActionScript virtuele machine, genaamd AVM2, die een nieuwe verzameling bytecode-instructies gebruikt en aanzienlijke prestatieverbeteringen biedt

  • Een modernere compilercodebasis die een betere optimalisering uitvoert dan oudere versies van de compiler

  • Een uitgebreide en verbeterde programmeerinterface voor toepassingen (API), met besturing van objecten op een laag niveau en een echt objectgeoriënteerd model

  • Een XML-API gebaseerd op de specificatie ECMAScript for XML (E4X) (ECMA-357, 2nd Edition). E4X is een taaluitbreiding voor ECMAScript die XML als een native gegevenstype van de taal toevoegt.

  • Een gebeurtenismodel, dat gebaseerd is op de Document Object Model (DOM) Level 3 Events Specification.

Voordelen van ActionScript 3.0

ActionScript 3.0 biedt meer dan de scriptmogelijkheden van eerdere versies van ActionScript. Het is ontworpen om het maken van zeer complexe toepassingen met grote gegevenssets en objectgeoriënteerde, herbruikbare code mogelijk te maken. ActionScript 3.0 is niet vereist voor inhoud die in Adobe Flash Player wordt uitgevoerd. Het opent wel de mogelijkheid voor prestatieverbeteringen die alleen beschikbaar zijn met de AVM2 (ActionScript 3.0 Virtual Machine). ActionScript 3.0-code kan tot tien keer sneller zijn dan oudere ActionScript-code.

De vorige versie van ActionScript Virtual Machine, AVM1, voert ActionScript 1.0- en ActionScript 2.0-code uit. Flash Player 9 en 10 ondersteunen AVM1 voor achterwaartse compatibiliteit.

Nieuw in ActionScript 3.0

Hoewel ActionScript 3.0 veel klassen en functies bevat die vertrouwd zijn voor programmeurs van ActionScript 1.0 en 2.0, verschilt ActionScript 3.0 conceptueel en op het gebied van de architectuur van de eerdere versies van ActionScript. De verbeteringen in ActionScript 3.0 bestaan uit nieuwe functies van de kerntaal en een verbeterde API die een betere besturing van objecten op laag niveau biedt.

Functies van de kerntaal

De kerntaal definieert de basisbouwstenen van de programmeertaal, zoals instructies, expressies, voorwaarden, lussen en typen. ActionScript 3.0 bevat veel functies die het ontwikkelingsproces versnellen.

Uitvoeringsuitzonderingen

ActionScript 3.0 meldt meer fouten dan eerdere versies van ActionScript. Uitvoeringsuitzonderingen worden gebruikt voor algemene fouten, wat de foutopsporing verbetert. Hierdoor kunt u toepassingen ontwikkelen die fouten op een krachtige manier afhandelen. Uitvoeringsfouten kunnen stacktraces met aantekeningen van bronbestand en regelnummerinformatie leveren, waarmee u snel fouten kunt vinden.

Uitvoeringstypen

In ActionScript 3.0 wordt type-informatie bij uitvoering opgeslagen. Deze informatie wordt gebruikt voor het controleren van het uitvoeringstype en het verbeteren van de typeveiligheid van het systeem. Informatie over gegevenstypen wordt ook gebruikt om variabelen in native machinerepresentaties te vertegenwoordigen, wat de prestaties verbetert en het geheugengebruik vermindert. In ActionScript 2.0 dienen typeannotaties vooral als hulp voor ontwikkelaars en worden alle waarden tijdens de uitvoering dynamisch ingevoerd.

Verzegelde klassen

ActionScript 3.0 bevat het concept van verzegelde klassen. Een verzegelde klasse bezit alleen de vaste verzameling eigenschappen en methoden die bij compilatie zijn gedefinieerd; u kunt geen aanvullende eigenschappen en methoden toevoegen. Omdat u tijdens de uitvoering een klasse niet meer kunt wijzigen, is een strictere controle van de compilatietijd mogelijk, wat robuustere programma's oplevert. Het verbetert tevens het geheugengebruik, omdat een interne hash-tabel niet voor elke objectinstantie is vereist. Dynamische klassen zijn ook mogelijk door het gebruik van het trefwoord dynamic. Alle klassen in ActionScript 3.0 zijn standaard verzegeld, maar kunnen als dynamisch worden gedeclareerd met het trefwoord dynamic.

Methode closure

In ActionScript 3.0 kan een methode closure automatisch zijn oorspronkelijke objectinstantie onthouden. Deze functie is nuttig voor het afhandelen van gebeurtenissen. In ActionScript 2.0 onthield een methode closure niet uit welke objectinstantie deze werd geëxtraheerd. Dit leidde tot onverwacht gedrag wanneer de methode closure werd aangeroepen.

ECMAScript for XML (E4X)

ActionScript 3.0 implementeert ECMAScript for XML (E4X), dat onlangs als ECMA-357 is gestandaardiseerd. E4X biedt een natuurlijke, vloeiende verzameling taalconstructies voor het bewerken van XML. In tegenstelling tot traditionele API’s die XML parseren, werkt XML met E4X als een native gegevenstype van de taal. E4X stroomlijnt de ontwikkeling van toepassingen die XML bewerken door de hoeveelheid benodigde code drastisch te verminderen.

Ga naar www.ecma-international.org als u de E4X-specificatie van ECMA wilt raadplegen.

Reguliere expressies

ActionScript 3.0 omvat native ondersteuning voor reguliere expressies zodat u tekenreeksen snel kunt zoeken en manipuleren. ActionScript 3.0 implementeert ondersteuning voor reguliere expressies, zoals deze worden gedefinieerd in de ECMAScript Language Specification (ECMA-262), 3rd Edition.

Naamruimten

Naamruimten lijken op de traditionele toegangsspecificaties die worden gebruikt om de zichtbaarheid van declaraties te beheren (public, private, protected). Ze werken als aangepaste toegangsspecificaties, die u namen naar keuze kunt geven. Naamruimten zijn voorzien van een Uniform Resource Identifier (URI) om conflicten te voorkomen. Ze worden tevens gebruikt om XML-naamruimten te vertegenwoordigen wanneer u met E4X werkt.

Nieuwe primitieve typen

ActionScript 3.0 bevat drie numerieke typen: getal, int en uint. Het getal vertegenwoordigt een getal met dubbele precisie en drijvend punt. Het type int is een 32-bits geheel getal met teken waardoor ActionScript-code gebruik kan maken van de snelle wiskundige mogelijkheden voor gehele getallen van de processor. Het type int is nuttig voor lustellers en variabelen waarbij gehele getallen worden gebruikt. Het type uint is een 32-bits geheel getal zonder teken dat nuttig is voor RGB-kleurwaarden, tellingen van bytes en meer. ActionScript 2.0 heeft slechts één numeriek type: Getal.

API-functies

De API's van ActionScript 3.0 bevatten veel klassen waarmee u objecten op een laag niveau kunt beheren. De architectuur van de taal is ontworpen om intuïtiever te werk te gaan dan in oudere versies. Hoewel we niet alle klassen in detail kunnen behandelen, zijn er een aantal belangrijke verschillen.

DOM3-gebeurtenismodel

Het gebeurtenismodel DOM3 (Document Object Model niveau 3) biedt een standaardmanier voor het genereren en beheren van gebeurtenisberichten. Dit gebeurtenismodel is ontworpen voor interactie en communicatie tussen objecten binnen toepassingen, het onderhouden van hun status en reageren op wijzigen. Het gebeurtenismodel ActionScript 3.0 is ontworpen volgens de specificatie voor gebeurtenissen in World Wide Web Consortium DOM niveau 3. Dit model biedt een helderder en efficiënter mechanisme dan de gebeurtenissystemen die beschikbaar zijn in vorige versies van ActionScript.

Gebeurtenissen en foutgebeurtenissen bevinden zich in het pakket flash.events. De Flash Professional-componenten en het Flex-framework gebruiken hetzelfde gebeurtenismodel, zodat het gebeurtenismodel voor het hele Flash Platform hetzelfde is.

Weergaveoverzicht-API

De API voor het verkrijgen van toegang tot het weergaveoverzicht, de boomstructuur die alle visuele elementen in de toepassing bevat, bestaat uit klassen voor het werken met visuele primitieven.

De Sprite-klasse is een lichtgewicht bouwsteen, die is ontworpen als een basisklasse voor visuele elementen zoals gebruikersinterfacecomponenten. De klasse Shape vertegenwoordigt onbewerkte vectorvormen. Deze klassen kunnen op natuurlijke wijze worden geïnstantieerd met de operator new en kunnen op elk ogenblik weer dynamisch aan de bovenliggende klasse worden toegevoegd.

Dieptebeheer is automatisch. Methoden worden aangeboden voor het opgeven en beheren van de stapelvolgorde van objecten.

Dynamische gegevens en inhoud verwerken

ActionScript 3.0 bevat mechanismen voor het laden en afhandelen van elementen en gegevens in uw toepassing die intuïtief en consistent zijn in de gehele API. De klasse Loader biedt een enkel mechanisme voor het laden van SWF-bestanden en afbeeldingselementen en biedt een manier om toegang te krijgen tot gedetailleerde informatie over geladen inhoud. De klasse URLLoader biedt een afzonderlijk mechanisme voor het laden van tekst en binaire gegevens in toepassingen die met gegevens werken. De klasse Socket biedt een manier om binaire gegevens te lezen en schrijven naar serversockets in elke willekeurige indeling.

Toegang tot gegevens op een laag niveau

Verschillende API's bieden toegang tot gegevens op laag niveau. Voor gegevens die worden gedownload, biedt de klasse URLStream, toegang tot gegevens als onbewerkte binaire gegevens terwijl ze worden gedownload. Via de klasse ByteArray kunt u lezen, schrijven en werken met binaire gegevens optimaliseren. De geluids-API biedt gedetailleerde besturing van geluid via de klassen SoundChannel en SoundMixer. API’s die betrekking hebben op beveiliging, bieden informatie over de beveiligingsrechten van een SWF-bestand of van geladen inhoud. Hierdoor kunt u beveiligingsfouten afhandelen.

Werken met tekst

ActionScript 3.0 bevat een pakket flash.text voor alle tekstgerelateerde API’s. De klasse TextLineMetrics bevat gedetailleerde afmetingen voor een regel tekst in een tekstveld; deze vervangt de methode TextFormat.getTextExtent() van ActionScript 2.0. De klasse TextField bevat methoden op een laag niveau die specifieke informatie kunnen geven over een regel tekst of over een enkel teken in een tekstveld. De methode getCharBoundaries() levert bijvoorbeeld een rechthoek op die het omsluitende kader van een teken vertegenwoordigt. De methode getCharIndexAtPoint() levert de index van het teken op een bepaald punt op. De methode getFirstCharInParagraph() levert de index van het eerste teken in een alinea op. Methoden op regelniveau bestaan uit getLineLength(), dat het aantal tekens in een opgegeven tekstregel retourneert en getLineText(), dat de tekst van de opgegeven regel retourneert. De klasse Font biedt een manier om ingesloten lettertypen in SWF-bestanden te beheren.

Voor tekstcontrole op een nog lager niveau, bestaat de Flash Text Engine uit de klassen in het flash.text.engine-pakket. Deze klassenset biedt tekstcontrole op laag niveau en is ontworpen voor het maken van tekstframeworks en componenten.