# ActionScript

ActionScript was de scripttaal of programmeertaal van Adobe Flash en Adobe Flex. Deze taal werd gebruikt om animaties of filmpjes interactief te maken. Er konden ook volledige spelletjes of geavanceerde applicaties mee worden gemaakt, waarbij er bijvoorbeeld interactie optreedt met de muis en het toetsenbord. ActionScript is een event-based taal, wat wil zeggen dat alle acties getriggerd worden door events (gebeurtenissen).

## Inleiding
### Event-driven of event-based programming

Men spreekt bij programmeren van event-based of event-driven programming wanneer de control flow van het programma bepaald wordt door acties, bijvoorbeeld het klikken met de muis, of door berichten van andere programma's/threads.

### ECMA-262

ActionScript is gebaseerd op de ECMA-262 (European Computer Manufactureres Association) standaard. Deze standaard is internationaal de standaard voor JavaScript. In de 5e versie van Flash werd een nieuwe syntaxis geïntroduceerd die ervoor zorgde dat ActionScript ging lijken op JavaScript, wat de taal een stuk gemakkelijker (herkenbaarder) maakte voor webontwikkelaars.

## Geschiedenis
### Actionscriptgeschiedenis
#### 2000-2003

Flash 4 had een zeer beperkte programmeertaal, "Actions" genaamd. Deze werd verbeterd, en werd meteen de eerste echte versie van ActionScript. Het was ook meteen de eerste versie die invloeden had van JavaScript en de ECMA-262. Dit werd geïntroduceerd samen met Flash Player 5. ActionScript kon nu ook ontwikkeld worden in een gewone tekstverwerker, zoals kladblok, in plaats van acties te selecteren uit uitklapmenu's, zoals het geval was bij Actions. Met het uitkomen van Flash Player 6 werden er niet al te veel wijzigingen doorgevoerd. Er waren enkel kleine veranderingen zoals het toevoegen van de strikt gelijk operator (===) zodat het meer ECMA-262-conform was. Een belangrijk kenmerk van ActionScript 1.0 ten opzichte van latere versies is het gebruik van "loose typing", ofwel zwakke typering. Dit wil zeggen dat variabelen in de code eender welk soort data konden bevatten.

#### 2003-2006

ActionScript 2.0 was een grote verandering voor de taal. De taal werd in gebruik genomen in september 2003, samen met het uitbrengen van Flash Player 7. Hoewel de code al meer gericht was op het OOP (objectgeoriënteerd programmeren), werd de code nog altijd naar ActionScript 1.0-bytecode gecompileerd, zodat de code nog compatibel was met Flash Player 6.
Met ActionScript 2.0 werd het ook mogelijk voor programmeurs om een vast datatype te binden aan een variabele. Zo kunnen type mismatch fouten gevonden worden tijdens het compileren. Een type mismatch is bijvoorbeeld het toewijzen van een string (stukje tekst) aan een variabele van het type Number.

#### 2006-nu

ActionScript 3.0 werd geïntroduceerd in juni 2006. Het werd uitgebracht samen met Flash Player 9. AS 3.0 ging gepaard met een fundamentele herstructurering. Zo fundamenteel zelfs dat de nieuwe Flash player een volledig andere virtuele machine gebruikt. Flash player 9 gebruikt 2 virtuele machines (VM's): één VM voor AS 1.0- en AS 2.0-code, en één VM voor AS 3.0.

### Flash Player-geschiedenis

| Flash Player-versie | Datum | Kenmerken |
| Flash Player 2 | 1997 | Knoppen, bibliotheken, tweening, stereo audio. Er waren enkele basis functies zoals Stop, GotoAndPlay, en dergelijke voor de timeline control. (Nota: dit was de eerste versie die vrijgegeven werd onder de naam Macromedia.) |
| Flash Player 3 | 1998 | De ‘alpha’-functie werd geïntroduceerd. Deze zorgt ervoor dat je objecten in je Flash-animatie doorschijnend kan maken. Er werd ook ondersteuning voor MP3 ingebouwd. Het laden van externe .swf-bestanden werd ook mogelijk gemaakt. |
| Flash Player 4 | mei 1999 | Het streamen van MP3 werd mogelijk gemaakt. Ook werd motion tweening geïntroduceerd. De eerste echte codetaal, namelijk Actions. Deze ondersteunde zaken zoals variabelen, loops, en andere basisconstructies. |
| Flash Player 5 | augustus 2000 | De eerste echte versie van ActionScript werd geïntroduceerd. Deze was gebaseerd op ECMAScript. Er was ondersteuning voor procedureel programmeren en OOP. |
| Flash Player 6 | maart 2002 | Ondersteuning van videostreaming. |
| Flash Player 7 | september 2003 | ActionScript 2.0 deed zijn intrede. Andere nieuwe functies zoals teksteffecten, extensies van derden ... |
| Flash Player 8 | augustus 2005 | Filtereffecten, blendingmodes, GIF- & PNG-ondersteuning, bitmapcaching, FlashType-typerendering, emulator van mobiele toestellen, nieuwe videocodec (On2 VP6). Opmerking: In december 2005 werd Macromedia (en dus ook het Flashplatform) overgenomen door Adobe Systems. |
| Flash Player 9 | juni 2006 | ActionScript Virtual Machine AVM2, ActionScript 3.0 |
| Flash Player 9 update 1 | november 2006 | (v9.0.28.0, codenaam: "Marvin") Ondersteuning voor volledigschermmodus. |
| Flash Player 9 update 2 | december 2007 | (v9.0.115.0, codenaam: "Moviestar") Ondersteuning voor H.264-video en AAC-audio. |
| Flash Player 10 | oktober 2008 | (v10.0.12.36, codenaam: "Astro") 3D-objecttransformaties, geavanceerde teksteffecten, Speex-audiocodec, RTMFP-ondersteuning (Real Time Media Flow Protocol), verbeterde anti-aliasing-engine. |
| Flash player 10.1 | juni 2010 | (v10.1.53.64) Globale foutafhandeling, multitouch, HTTP-streaming, hardwarematige H.264-decoding. |
| Flash player 10.2 | Preview september 2010 | Ondersteuning voor 64-bitbrowsers. |

## Actionscriptsyntaxis
### Datatypes

Hieronder staan enkele van de datatypes die beschikbaar zijn in ActionScript (AS 2.0 en AS 3.0).
ActionScript 2-toplevel-datatypes:
* String: een lijst (opsomming) van karakters, bijvoorbeeld "Hello World"
* Number: elke numerieke waarde
* Boolean: een bistabiele variabele die ofwel "true" (juist) ofwel "false" (fout) is. Flash zal ook de waarden 1 en 0 accepteren.
* Object: dit is het datatype waarvan alle complexe data types afgeleid worden. Het laat toe methodes, parameters en andere objecten te groeperen.
Complexe datatypes in ActionScript 2 (vereisen meer geheugen en processorresources):
* MovieClip: een creatie in AS die ervoor zorgt dat er gemakkelijk visuele elementen kunnen worden toegevoegd.
* TextField: een afgeleide van de MovieClip die voor een tekstveld zorgt. Dit tekstveld kan statisch zijn, dynamisch, of kan zelfs invoer van de gebruiker vereisen.
* Button: is een afgeleide van de MovieClip. De knop heeft 4 statussen, namelijk up, over, down en hit. Een korte uitleg over deze statussen:
** Up: de knop is ruststand. Er gebeurt niets mee.
** Over: er wordt met de muisaanwijzer over de knop gegaan.
** Down: deze state is er wanneer de muis wordt ingedrukt en de muis op de knop staat
** Hit: dit frame bevat het raakgebied van de button. Dit is de 'hitbox' van de button.
* Date: zorgt voor toegang tot informatie in verband met tijd
* Array: dit type zorgt voor de lineaire opslag van data, bijvoorbeeld een reeks getallen.
* XML: een XML object. Een verwant data type is de XMLNode.
* Sound
* NetStream
* NetConnection
* MovieClipLoader
* EventListener
Primitieve datatypes in ActionScript 3:
* Boolean: een bistabiele variabele die ofwel "true" (juist) ofwel "false" (fout) is. Flash zal ook de waarden 1 en 0 accepteren.
* int: een 32 bit-integer tussen -2,147,483,648 en 2,147,483,647.
* Null: dit datatype heeft maar één waarde, namelijk "null". Dit is de standaard (default) waarde voor het datatype string, en duidt dus op een lege string.
* Number: dit data type kan integers, met of zonder teken, en floating-point-nummers voorstellen. Het gebruikt 64 bit-double-precision-formaat. De waardes kunnen tussen -9,007,199,254,740,992 en 9,007,199,254,740,992 liggen.
* String: een opeenvolging van 16 bittekens. De strings worden intern opgeslagen als Unicodetekens, volgende de UTF-16-standaard. Vorige versies van Flash gebruikten de UTF-8-standaard.
* uint: unsigned integer. Dit type is een 32 bit-integer zonder teken die tussen 0 en 4,294,967,295 ligt.
* void: dit datatype bevat maar één waarde, namelijk "undefined". Void wordt bijvoorbeeld gebruikt voor het aanduiden dat een functie geen waarde retourneert.
Complexe datatypes in ActionScript 3:
* Vector: een variant op de array. Vectoren zijn meer type-safe (bestand tegen type-mismatches), maar zijn ook veel beter voor de prestaties. Ze zijn wel enkel beschikbaar vanaf Flash Player 10.

### Voorbeelden
## Beveiliging
### Decompileren

Een project gemaakt in Flash moet altijd eerst gecompileerd worden vooraleer het uitgevoerd kan worden. Dit compileren zorgt ervoor dat de code wordt omgezet naar bytecode of machinetaal. Het project wordt zo samengevat in één bestand. Bij Flash is dit bijvoorbeeld een .swf-file (swiff-file uitgesproken). Er zijn echter programma's beschikbaar die een .swf-file terug kunnen omzetten naar hun originele broncode. Sommige programma's slagen hier vrij goed in, anderen zijn daar minder goed in. Dit decompileren houdt zekere risico's in. Zo moet er bijvoorbeeld geen vertrouwelijke informatie zoals wachtwoorden in de code opgeslagen worden aangezien deze gewoon gelezen kunnen worden. Maar er zijn nog problemen: het decompileren legt de broncode vrij. Dus als iemand een stuk code heeft geschreven dat eigenlijk niet bestemd is voor ieders ogen, dan kan dat een probleem vormen. Zo kunnen gebruikers bepaalde stukken in het programma gaan misbruiken of het onrechtmatig namaken.

### Obfuscators

Het onrechtmatig vrijleggen van de broncode van een project kan zeer lastig zijn. Er zijn echter programma's op de markt die de broncode tijdens of na het compileren onleesbaar proberen te maken en proberen tegen te gaan dat andere programma's de code kunnen decompileren, of de-assembleren.