Ako nadšenci Flashu určite vedia, Macromedia v novom Flashi uviedla aj novú verziu programovacieho jazyka ActionScript. Keďže nová verzia má na konci označenie 2.0, starú premenovali na ActionScript 1.0 (AS1.0). Je to síce už nejaký čas od uvedenia nového Flashu, ale lepšie neskôr ako nikdy, a tak si o ActionScript 2.0 (AS2.0) niečo povieme, ukážeme a vyskúšame.

Zanietení flasheri sa už určite doma hrali s novým ActionScriptom 2.0 a aj čítali články na internete. Aj ja som sa po internete poobzeral a našiel som ich veľa. Väčšinu však v angličtine – pre tých, ktorým sa ľahšie číta po česky alebo slovensky som ich na českých a slovenských stránkach našiel len pár. Na druhej strane je pravda, že kto chce robiť vo Flashi, mal by vedieť čo to po anglicky. Všetko to však boli len úlomky a čiastkové informácie a tak som sa rozhodol napísať sériu článkov, z ktorých by ste všetci (začiatočníci aj starý skúsení programátori) pochopili, o čom ActionScript 2.0 je a ako ho správne a čo najefektívnejšie používať.

Keďže plánujem sériu článkov, rád by som v nej popísal nasledovné:

  • čo je nové v ActionScript 2.0
  • OOP (object oriented programming) s ActionScript 2.0
  • vytváranie tried (class)
  • dedenie (inheritance)
  • interface (tvorba a implementácia)
  • práca s ActionScript 2.0, nové preddefinované triedy, príkazy, tipy a triky
  • ako vytvoriť vlastnú triedu
  • ako vytvoriť vlastnú aplikáciu
  • ako vytvoriť vlastnú hru
  • ako využiť ActionScript 2.0 čo najefektívnejšie

Ak ste nenašli niečo, čo by vás zaujímalo, alebo máte iné návrhy, ktoré by mohli ostatných flasherov zaujímať, napíšte ich, prosím, do príspevkov pod tento článok.

Tak hor sa do toho…

Viem si vás živo predstaviť, ako nadávate, že ste sa ešte nestihli naučiť ani ActionScript 1.0, a už je tu nový programovací jazyk. Musím vás všetkých upokojiť, že to nie je až také zlé, ako sa zdá. Kto už predtým robil v ActionScript 1.0, nebude mať problémy naučiť sa pracovať aj s novým ActionScriptom. Dalo by sa povedať, že nová verzia je z väčšej miery rovnaká ako verzia 1.0. Zjednodušene, ak ste predtým neprogramovali svoje vlastné triedy a nepoužívali komponenty, tak rozdiely medzi AS1.0 a AS2.0 sú veľmi mierne.

ActionScript 2.0 je v oboch verziách nového Flashu, Flash MX 2004 aj Flash MX 2004 Professional. V oboch verziách však môžete aj naďalej používať AS1.0. Stačí si v „Publish Settings“ v záložke „Flash“ nastaviť „ActionScript version“ na ActionScript 1.0. S AS1.0 môžete publikovať aj pre Flash Player 6, aj pre Flash Player 7. Neodporúča sa kombinovať AS1.0 s AS2.0, z jednoduchého dôvodu, že to nebude fungovať. Možno by ste našli pomiešané skripty, ktoré by fungovali, ale je to skôr ojedinelé.

Výber z verzie ActionScriptu v Publish Settings
Výber z verzie ActionScriptu v Publish Settings

Tak načo vlastne potrebujeme nový ActionScript? Flash programátori mali pri programovaní objektovo orientovaných aplikácií oveľa ťažšiu úlohu, ako kolegovia programátori v iných jazykoch (Java, C++, C#). Práca s vlastnými triedami, dedením a objektmi bola zložitejšia, komplikovanejšia a nemotorná. Flash programátori museli ovládať všetky procesy, ktoré sa dejú v pozadí pri definovaní tried a dedení. V ActionScript 2.0 sa im bude pracovať oveľa efektívnejšie, intuitívnejšie. ActionScript 2.0 prináša oveľa väčšiu podporu OOP a podobá sa viac Jave, JScript.NET a JavaScript 2.0. Programátori, ktorí pracovali alebo pracujú v týchto jazykoch, sa v AS2.0 budú cítiť ako doma, všetky tieto jazyky sú totiž založené na ECMAScript Edition 4 proposal (ide vlastne o predpis pre programovacie jazyky).

Dobre, možno si poviete, že vy neprogramujete aplikácie. Možno práve vy tvoríte hry alebo interaktívne prezentácie. Dobrá správa je, že AS2.0 prináša výhody taktiež pre túto tvorbu. Vo väčšine seriózneho programovania vo Flashi budete pracovať a určite aj pracujete s triedami, objektmi a komponentmi, takže výhody AS2.0 sa vám zídu.

Keď nahliadneme pod pokrývku práce s AS2.0, zistíme, že Flash pri kompilácii (exportovaní) konvertuje zdrojový kód ActionScript 2.0 na ActionScript 1.0 ekvivalent, na takzvané „bytecodes“, ktorým Flash Player rozumie a vie ich interpretovať. Dôvod je spätná kompatibilita AS2.0 s Flash Player 6. AS2.0 naoko používa nový syntax, ale za oponou sa stále skrýva starý známy prototype a veci s ním spojené. Macromedia sama nazvala AS2.0 „syntactic formalization of the prototype chaining method“.

Čo je nové v ActionScript 2.0?

V skratke by sa to dalo vymenovať asi takto:

  • striktné definovanie premenných a vylepšené varovania pri kompilovaní
  • „code hinting“ (pomoc pri písaní kódu), založené na dátových typoch premenných
  • nové kľúčové slová (keywords) ako class, interface, extends, implements, public, private, static, dynamic, intrinsic (pôvodne len pre interné použitie Macromedie), import, class path (package), get a set
  • „case sensitivity“, čiže rozlišovanie veľkých a malých písmen
  • formálny syntax písania tried (podľa ECMAScript špecifikácie)
  • balíky tried (packages) a cesta k triedam
  • getter/setter metódy pre efektívnejšiu prácu s vlastnosťami tried
  • nový spôsob dedenia
  • interfaces – v ActionScripte 2.0 úplne nová vec
  • nový model vysielania udalostí (broadcasting event model)
  • nové príkazy a preddefinované triedy ako Camera, PrintJob a ďalšie

Striktné definovanie premenných (Strict Data Typing)

Ide vlastne o to, že pomocou Strict Data Typing definujete premenné, ktoré môžu obsahovať len jeden dátový typ. Napríklad definujete premennú, ktorá je dátového typu Number (číslo). Tejto premennej potom nemôžete priradiť žiadny iný typ dát ako číslo. Ak priradíte iný dátový typ, pri kompilovaní sa vygeneruje chyba. Striktné definovanie premennej pomáha zabezpečiť, že používate tie správne praktiky kódovania, zlepšuje čitateľnosť kódu (najmä ak pracujete v tíme) a pomáha eliminovať veľa chýb, ktoré môžu vznikať zo zle použitých premenných z ActionScriptu 1.0.

Programátori v AS1.0 mali často problémy pri debugovaní svojich prác (hlavne komplexných projektov) a tieto boli spôsobené práve tým, že stratili prehľad vo svojich premenných. V ActionScripte 1.0 ste mohli deklarovať premennú, priradiť jej textovú hodnotu a hneď nato jej priradiť číselnú hodnotu:

var mojeMeno = „Milan“;
mojeMeno = 4;

V tomto jednoduchom prípade je jasné, že chcete aby v premennej „mojeMeno“ bolo vaše meno a nie nejaké číslo. Počas programovania sa často stáva, že premennej nie je prideľovaná priamo hodnota, ale je generovaná dynamicky. Takže nie vždy viem jednoducho skontrolovať, čo bolo premennej priradené, a preto vznikajú chyby, ktoré sa musia pracne hľadať.

V AS2.0 je to už pekne vyriešené. Ak deklarujete (definujete) nejakú premennú určitého dátového typu a náhodou sa k nej priradí hodnota iného dátového typu, vygeneruje sa chyba, ktorá vám povie, že je priradený dátový typ premennej nesedí so zadefinovaným dátovým typom. Takže sa môžete naozaj spoľahnúť na vaše premenné a to vám uľahčí vela úsilia pri testovaní vašich aplikácií.

Pri striktnom zadefinovaní premennej musíte použiť var keyword, nasledované menom premennej, dvojbodkou a dátovým typom. Všetky dátové typy sa začínajú na veľké písmeno. V tomto príklade definujem premennú „mojeMeno“ ako dátový typ String:

var mojeMeno:String;

Premennú môžem zadefinovať a neskôr jej potom priradiť hodnotu, alebo jej priradiť hodnotu hneď pri definovaní:

var mojeMeno:String = „Milan“;

Po zadefinovaní premennej sa k nej pristupuje bez var keyword, bez dvojbodky, aj bez dátového typu, takže ak chcem priradiť premennej inú hodnotu, použijem:

mojeMeno = „Jano“;

Ak by som použil nasledujúci kód, deklaroval by som novú premennú s rovnakým menom, ktorá by nahradila predchádzajúcu, čo som vlastne nechcel:

var mojeMeno = „Jano“;

Pri pokuse priradiť premennej dátového typu String (teda text) iný dátový typ, napríklad číslo, dostanem nasledujúcu chybu v Output okne:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: Type mismatch in assignment statement: found Number where String is required. sProduct = 8;

Striktné definovanie premenných je však iba compile-time nástroj. Znamená to, že sa typy premenných kontrolujú len pri kompilácii (exporte) swf, nie pri jeho chode. Akonáhle už aplikácia beží, premenným môže byť priradená akákoľvek hodnota, dátový typ sa už nekontroluje.

Pozor však na globálne premenné, tie sa striktne definovať nedajú. Nepoužíva sa ani var keyword, stačí staré známe _global:

_global.mojeMeno = „Milan“;
var _global.mojeMeno = „Milan“; // vygeneruje chybu
_global.mojeMeno:String = „Milan“; // vygeneruje chybu

Strict Data Typing sa takisto využíva aj pri definovaní funkcií. Konkrétne sa definujú dátové typy argumentov funkcií a hodnota, ktorú funkcia vracia. Napríklad táto funkcia akceptuje ako argument meno dátového typu String a vracia hodnotu dátového typu Boolean (True alebo False):

function mojaFunkcia (meno:String) :Boolean {};

Ak funkcia neakceptuje žiadne argumenty a nevracia žiadnu hodnotu, použite „Void“ ako dátový typ:

function mojaFunkcia (Void) :Void {};

Void jednoducho znamená, že funkcia nevyžaduje žiadne argumenty a nevracia žiadnu hodnotu. Nie je to však kontrolované pri kompilovaní, takže ak priradíte funkcii nejaký ten argument, príjme ho a nevygeneruje sa žiadna chyba.

Používať striktné definovanie premenných je užitočný zvyk, hoci to nie je vyžadované. Výhody už poznáte. Ak používate Strict Data Typing, musíte v „Publish Settings“ vybrať ActionScrip 2.0, ale nemusíte publikovať len pre Flash Player 7, lebo, ako už vieme, Flash umožňuje s AS2.0 publikovať aj do Flash Player 6. Urobíte ale lepšie, ak zaškrtnete políčko „Optimize for Flash Player 6 r65“ pre lepšiu optimalizáciu so starším Flash Playerom.

Pozn. aut.: Niektoré časti článku som konzultoval cez email s Joey Lottom, ktorý napísal výborné anglické články o AS2.0.

Zdroje a odkazy

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět