мини|десно|Spisak akcija u Flashu ActionScript (Slika desno) predstavlja spisak akcija u Flashu 4 kojima je bilo moguće uticati na tok filma. Akcije su se pridruživale određenom frejmu ili događaju nad simbolom tipa dugme. Iz spiska se vidi da su mogućnosti programiranja pre svega bile orijentisane na upravljanje tokom filma (zaustavljanje, kretanje, skokovi na određene frejmove), uz skromno prisustvo komandnih struktura, naredbe grananja i loop petlje. Naredba Call imala je za zadatak poziv bloka komandi pridruženih nekom frejmu, simulirajući na taj način korisničku funkciju. Ovakav pristup sigurno da nije omogućavao komotan rad s programerske tačke gledišta, ali je doveo do pomeranja sa akcenta programa sa animacije ka interakciji, što je za rezultat imalo pojavu šireg spektra aplikacija rađenih u Flashu.HTML5, vector animation software | Adobe Animate CC (Flash Pro)

Peta verzija programa predstavlja kvalitativni pomak u pravcu programiranja, odlučeno je da Flash postane ozbiljan alat za programiranje. U Flashu se pojavljuje ActionScript.

ActionScript je skript jezik čiji je cilj kontrola objekata u Flash filmovima, kreiranje navigacionih i interaktivnih elemenata, i za kreiranje filmova visokog stepena interakcije i web aplikacija.

Script jezik Skript jezik je programski jezik koji se koristi za manipulaciju, prilagođenje i automatizaciju postojećeg sistema. U takvim sistemima, funkcionalnost je već obezbeđena putem korisničkog interfejsa, a skript jezik predstavlja mehanizam za proširenje funkcionasti programskom kontrolom. Za postojeći sistem se kaže da obezbeđuje domaćinsko okruženje za objekte i mogućnosti koje kontroliše skript jezik.

Asocijacija evropskih proizvođača kompjutera (ECMAWelcome to Ecma International – the European Computers Manufacturers Association, www.ecma.ch) sastavila je dokument pod nazivom ECMA-262 čiji je cilj standardizacija jezika JavaScript. ActionScript zasniva se na specifikaciji ovog dokumenta. -:- https://web.archive.org/web/20140606181403/http://www.ecma.ch/ecma1/STAND/ecma-262.htm

Elementi jezika Sintaksa ActionScripta podseća na Javu. Razlika je u tome što jezik upućuje na jednostavnost u korišćenju. Na primer, promenjiva ne mora da ima deklarisan tip niti se tipovi povezuju sa osobinama objekta, a definisane funkcije ne moraju biti deklarisane u tekstu pre njihovog poziva.

ActionScript se zasniva na objektima: osnovni jezik i okruženje Flasha obezbeđuju se putem objekata, a sam program u ActionScriptu je put komunikaciji među objektima. Sam objekat je kolekcija osobina (properties) koje mogu imati atribute koji određuju način korišćenja osobine (na primer – ReadOnly). Osobine su kontejneri koji sadržavaju druge objekte, primitivne vrednosti ili metode. Objekat u ovom smislu predstavlja referencu na objekat, primitivna vrednost je vrednost nekog primitivnog tipa podataka, a metod je funkcija koja se s objektom povezuje putem osobine.

ActionScript 2.0 ActionScript 2.0 uveden je u septembru 2003god. sa izdavanjem Flash MKS 2004 i njegovog odgovarajućeg plejera, Flash Player 7. Sa ActionScript 2.0 , programeri mogu da ograniče promenljive na određeni tip, neusklađenosti i greške mogu se naći prilikom kompajliranja. ActionScript 2.0 je takođe predstavio class-based sintaksu, tako da su programeri u mogućnosti da kreiraju klase i interfejse. Ova verzija vlada delimično na ECMAScript. Četvrto izdanje draft specifikacije .

Tipovi podataka i promenljive Tip podataka predstavlja vrstu informacije koju promenljiva ili element ActionScripta može da sadrži. Tipovi podataka dele se na primitivne i referentne tipove, a postoje i specijalni tipovi podataka. Primitivni tipovi su string, number i boolean Referentni tipovi su object, function i movieClip Specijalni tipovi podataka: null i Undefined Referentni tipovi kao vrednost imaju adresu svog sadržaja. Tip movieClip je grafička reprezentacija elemenata Flasha.

var myVar; trace (“typeof (myVar): ” + typeof (myVar)); // undefined myVar = true; trace (“typeof (myVar): ” + typeof (myVar)); // boolean myVar = 0; trace (“typeof (myVar): ” + typeof (myVar)); // number myVar = “my String”; trace (“typeof (myVar): ” + typeof (myVar)); // string myVar = new Array (); trace (“typeof (myVar): ” + typeof (myVar)); // object myVar = trace; trace (“typeof (myVar): ” + typeof (myVar)); // function myVar (“typeof (myVar): ” + typeof (myVar)); // function

Promenljiva se može deklarisati sa var. Deklaracija određuje njeno ime i lokalnost, odnosno promenljiva tada postaje lokalna u bloku u kome je deklarisana. U navedenom primeru korištene su funkcije trace, koja služi za ispis string vrednosti izraza svog argumenta u posebni izlazni prozor (korisno pri testiranju programa), i typeof, koja vraća naziv tipa izraza svog argumenta. Dvostruka kosa crta (//) predstavlja početak linijskog komentara, pri interpretaciji se ignorišu svi karakteri u liniji nakon ove oznake (komentar u više linija postavlja se između oznaka /* i */). Prvi poziv funkcije trace u izlazni prozor ispisuje “typeof (myVar): undefined” jer promenljivoj nije dodeljena vrednost, tako da joj nije određen ni tip. Dodela vrednosti određuje tip promenljive. To znači da promenljiva može da menja svoj tip. U primeru, poslednjom dodelom (myVar = trace) je promenljivoj dodeljena funkcija trace, znači ona je tipa function, ona postaje funkcija koja se ponaša na isti način kao i trace, tako da poslednja linija poziva promenljivu myVar kao funkciju i dobija se takođe odziv u izlaznom prozoru.

Promenljiva se ne mora deklarisati. U tom slučaju smatra se za globalnu.

ActionScript vrši automatsku konverziju tipova pri izvođenju operacija, tako da nedefinisane promenljive mogu učestvovati u operacijama, gde se prevode kao neutralni element sabiranja (logičko – false, numerički – 0, string – “”).

Operatori ActionScript definiše skup ugrađenih operatora koji se mogu podeliti u sledeće grupe: numerički operatori, operatori poređenja, String operatori, logički operatori, bit-orijentisani operatori, operatori jednakosti i operatori dodele. Kao i u drugim programskim jezicima, operatori su hijerarhijski određeni po prioritetu izvršavanja operacija.

Zanimljivi operatori su, recimo, operatori dodele, što ilustruje sledeći primer: var myString = “my”; myString += “ String”; trace (“myString: “ + myString); // “myString: my String” Prva linija deklariše promenljivu myString i dodeljuje mu (“obična” dodela) String vrednost “my”. U drugoj linija koda takođe je dodela, ali sa operatorom +=, što semantički predstavlja sledeće: saberi vrednost operanda s leve strane operatora (promenljivu myString) sa operandom s desne strane (“ String”) i rezultat sabiranja dodeli promenljivoj s leve strane.

Drugi primer ilustruje operatore inkrementacije (++): var myVar = 0; trace (“myVar: “ + myVar); // “myVar: 0“ trace (“myVar++: “ + myVar++); // “myVar++: 0“ trace (“myVar: “ + myVar); // “myVar: 1“ trace (“++myVar: “ + ++myVar); // “++myVar: 2“ trace (“myVar: “ + myVar); // “myVar: 2“ Post-inkrementacija povećava vrednost promenljive nakon njenog učestvovanja u izrazu, a pre-inkrementacija prvo povećava vrednost promenljive koja daje svoju novu vrednost za izračunavanje izraza.

Treći primer, uslovna dodela: var myBool = true; var notBool = !myBool; trace (“myBool: “ + ((myBool) ? myBool : notBool)); trace (“notBool: “ + ((notBool) ? myBool : notBool)); Uslovna dodela je ternarni operator. Prvi operand je logički izraz koji se izračunava. Ako je izračunao true, operator računa vrednost drugog operanda (iza znaka pitanja) i to vraća kao rezultat, inače (izračunato false) se računa vrednost trećeg operanda (iza dvotačke) i to postaje rezultat. U ovom primeru prvi poziv trace ispisuje “myBool: true”, jer se ispituje uslov myBool (true) i vraća vrednost drugog operanda (myBool ima vrednost true), dok drugi poziv ispisuje “notBool: false” jer je uslov netačan (notBool, pri dodeli je !myBool, negacija od true) pa se vraća vrednost trećeg operanda (notBool je false). Grananje i petlje Naredba if u ActionScriptu ima sledeću sintaksu:

if (condition) { // statements } else { // statements } Ovde je condition logički izraz, obavezno naveden u zagradama, na osnovu kojeg se donosi odluka da li se izvršava kod bloka naredbi unutar vitričastih zagrada. Blok naredbi se uvek navodi unutar vitričastih zagrada, a pojedine naredbe u bloku razdvajaju se tačka-zarezom (;). U slučaju samo jedne naredbe nije neophodno navođenje vitričastih zagrada. Druga grana (else) takođe nije obavezna. U ActionScriptu kod Flasha 5 ne postoji switch naredba za višestruko grananje, a to je jedna od novina koje donosi nova verzija programa, Flash MXFlash Developer Center | Adobe Developer Connection.

Ponavljanje dela koda obezbeđeno je petljama for, while, do-while i for-in. U svim petljama mogu se koristiti komande continue, za skok na sledeću iteraciju, i break, za napuštanje petlje.

for (init; condition; next) { // statements } Slično kao i u jeziku Java, for petlja zadaje se s tri parametra: inicijalna vrednost kontrolne promenljive, izlazni uslov i izraz za izračunavanje pre naredne iteracije. Po definiciji je dozvoljeno izostavljanje bilo kog od ova tri dela (ostaje tačka-zarez). Izraz init se izračunava samo jednom, pre početka prve iteracije, izraz condition mora biti logički i izračunava se pre svake iteracije i odlučuje da li se nastavlja sa iteracijom (izračunato true) ili ne (false), izraz next izračunava se na kraju svake iteracije. Ovakva konstrukcija dozvoljava mnogo veću slobodu pri baratanju petljom u odnosu na, recimo, paskaloliku konstrukciju. Ipak, uobičajeno se koristi baš simulacija te osnovne konstrukcije, postavljanjem inicijalne vrednosti kontrolne promenljive u prvom delu, poređenje kontrolne promenljive s nekom izlaznom vrednošću u drugom delu i inkrementiranje ili dekrementiranje kontrolne promenljive u trećem delu.

while (condition) { // statements } Dogod je uslov condition ispunjen izvršava se blok naredbi petlje while. Ovo ispitivanje može biti i numeričko, u kom slučaju se ispituje različitost od vrednosti 0.

do { // statements } while (condition) Slično je i kod petlje do-while, s razlikom što se prvo izvršava blok naredbi, pa tek onda proverava uslov (što znači, kod bloka izvršava se bar jednom). Ovo podseća na paskalsko repeat-until, a razlika je kod uslova – do-while radi dok je ispunjen uslov, a repeat-until prekida po ispunjenju uslova.

for (variableiterant in object){ // statements } Petlja for-in koristi se osobinama objekta. Primer:

myObject = {name:'Tara', age:27, city:'San Francisco'}; for (name in myObject) { trace ("myObject." + name + " = " + myObject [name]); } Primer je iz rečnika ActionScripta 5. Izlaz izgleda ovako:

myObject.name = Tara myObject.age = 27 myObject.city = San Francisco Prva linija koda daje jedan način zadavanja objekta. Objekat myObject ima 3 osobine, svakoj je dodeljena određena vrednost. Promenljivoj name u for-in petlji pridružuju se imena osobina objekta myObject, redom kroz iteracije. Primer takođe prikazuje dva načina pristupa vrednostima osobina objekta. U izlaznom prozoru prikazan je prikaz referenciranja "tačkom", odnosno navodi se ime objekta, tačka i sledi ime osobine. To i jeste uobičajen način referenciranja, ali nije bilo moguće unutar for-in petlje pozvati myObject.name, jer bi se to odnosilo na osobinu name objekta, a ne promenljivu petlje. Stoga je korišćena referenca myObject [name], koja izračunava izraz u uglastim zagradama (vrednost promenljive name) i potom traži vrednost odgovarajuće osobine objekta. Funkcije Definicija funkcije:

function myFunc ([arg0, arg1,...argN]) { // statements } // ili function ([arg0, arg1,...argN]) { // statements }