title: ActionScript
text: 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
  
  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 
     //Voorbeeld van een functie in ActionScript
     //Declaratie van een functie die geen waarde retourneert (void)
     
     public function zegHallo():void {
        trace("Hello world");
     }
  
     //Voorbeeld van een functie in ActionScript
     //Declaratie van een functie die de inputstring retourneert
     
     public function retourneer(input:String):String {
        return input;
     }
  
     //Voorbeeld van het declareren van verschillende types variabelen
     
     var myString:String = new String();
     myString = "Hello world";
     
     var myString2:String = "Hello world2";
     
     var myNumber:Number = 3021;
     
     var myArray = new Array();
     myArray[0] = "Hello"; //Array-indexering begint bij 0
     myArray[1] = " ";
     myArray[2] = "World";
  
  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.
  
  Zie ook 
   Lijst van programmeertalen
  
  Referenties 
   SearchSOA techtarget.com
   Informit.com
   Wikipedia.com Event driven programming
   Mediacollege.com
  
  Programmeertaal