<p id='prepend'>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.</p>
<p>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¥.</p>
<p>Ke∩₧e plßnujem sΘriu Φlßnkov, rßd by som v nej popφsal nasledovnΘ:</p>
<div class='list'>
<ul>
<li>Φo je novΘ v ActionScript 2.0</li>
<li>OOP (object oriented programming) s ActionScript 2.0</li>
<li>vytvßranie tried (class)</li>
<li>dedenie (inheritance)</li>
<li>interface (tvorba a implementßcia)</li>
<li>prßca s ActionScript 2.0, novΘ preddefinovanΘ triedy, prφkazy, tipy a triky</li>
<p>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.</p>
<h3>Tak hor sa do toho...</h3>
<p>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.</p>
<p>ActionScript 2.0 je v oboch verzißch <a href='http://interval.cz/clanek.asp?article=2698' title='Äigmond, Milan: Macromedia Flash MX 2004'>novΘho Flashu</a>, 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Θ.</p>
<div class='image'>
<img src='podklady/zigmond/733/obr1.png' alt='V²ber z verzie ActionScriptu v Publish Settings' title='V²ber z verzie ActionScriptu v Publish Settings' />
<br /><span class='comment'>V²ber z verzie ActionScriptu v Publish Settings</span>
</div>
<p>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 <a href='http://www.mozilla.org/js/language/Edition4.pdf' title='ECMAScript Edition 4 proposal (PDF file)'>ECMAScript Edition 4 proposal</a> (ide vlastne o predpis pre programovacie jazyky).</p>
<p>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.</p>
<p>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".</p>
<h3>╚o je novΘ v ActionScript 2.0?</h3>
<p>V skratke by sa to dalo vymenova¥ asi takto:</p>
<div class='list'>
<ul>
<li>striktnΘ definovanie premenn²ch a vylepÜenΘ varovania pri kompilovanφ</li>
<li>"code hinting" (pomoc pri pφsanφ k≤du), zalo₧enΘ na dßtov²ch typoch premenn²ch</li>
<li>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</li>
<li>"case sensitivity", Φi₧e rozliÜovanie ve╛k²ch a mal²ch pφsmen</li>
<li>balφky tried (packages) a cesta k triedam</li>
<li>getter/setter met≤dy pre efektφvnejÜiu prßcu s vlastnos¥ami tried</li>
<li>nov² sp⌠sob dedenia</li>
<li>interfaces û v ActionScripte 2.0 ·plne novß vec</li>
<li>nov² model vysielania udalostφ (broadcasting event model)</li>
<li>novΘ prφkazy a preddefinovanΘ triedy ako Camera, PrintJob a ∩alÜie</li>
</ul>
</div>
<h4>StriktnΘ definovanie premenn²ch (Strict Data Typing)</h4>
<p>Ide vlastne o to, ₧e pomocou <strong>Strict Data Typing</strong> 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.</p>
<p>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:</p>
<div class='sample'>
var mojeMeno = "Milan";
<br />mojeMeno = 4;
</div>
<p>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¥.</p>
<p>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φ.</p>
<p>Pri striktnom zadefinovanφ premennej musφte pou₧i¥ <em>var</em> 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:</p>
<div class='sample'>
var mojeMeno:String;
</div>
<p>Premenn· m⌠₧em zadefinova¥ a nesk⌠r jej potom priradi¥ hodnotu, alebo jej priradi¥ hodnotu hne∩ pri definovanφ:</p>
<div class='sample'>
var mojeMeno:String = "Milan";
</div>
<p>Po zadefinovanφ premennej sa k nej pristupuje bez <em>var</em> keyword, bez dvojbodky, aj bez dßtovΘho typu, tak₧e ak chcem priradi¥ premennej in· hodnotu, pou₧ijem:</p>
<div class='sample'>
mojeMeno = "Jano";
</div>
<p>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:</p>
<div class='sample'>
var mojeMeno = "Jano";
</div>
<p>Pri pokuse priradi¥ premennej dßtovΘho typu <em>String</em> (teda text) in² dßtov² typ, naprφklad Φφslo, dostanem nasleduj·cu chybu v Output okne:</p>
<div class='sample'>
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: Type mismatch in assignment statement: found Number where String is required. sProduct = 8;
</div>
<p>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.</p>
<p>Pozor vÜak na <a href='http://interval.cz/clanek.asp?article=2492' title='Äigmond, Milan: ètandardy programovania v ActionScripte'>globßlne premennΘ</a>, tie sa striktne definova¥ nedaj·. Nepou₧φva sa ani <em>var</em> keyword, staΦφ starΘ znßme <em>_global</em>:</p>
<p>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 <em>String</em> a vracia hodnotu dßtovΘho typu <em>Boolean</em> (True alebo False):</p>
<div class='sample'>
function mojaFunkcia (meno:String) :Boolean {};
</div>
<p>Ak funkcia neakceptuje ₧iadne argumenty a nevracia ₧iadnu hodnotu, pou₧ite "Void" ako dßtov² typ:</p>
<div class='sample'>
function mojaFunkcia (Void) :Void {};
</div>
<p>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.</p>
<p>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.</p>
<p><span class='note-author'>Pozn. aut.: NiektorΘ Φasti Φlßnku som konzultoval cez email s <a href='http://www.person13.com'>Joey Lottom</a>, ktor² napφsal v²bornΘ anglickΘ Φlßnky o AS2.0.</span></p>
<div class='refer'>
<h3>Zdroje a odkazy</h3>
<ul>
<li><a href='http://www.macromedia.com'>Macromedia</a> - domovskß strßnka nielen Flash MX 2004 Professional, kterΘho Help som pou₧φval</li>
<li><a href='http://poly-comp.com/ASblog/view.php?cisloclanku=2003120901'>http://poly-comp.com/ASblog/</a> - ve╛mi dob² preh╛ad Φlßnkov o ActionScript 2.0</li>
<li><a href='http://www.swfoo.com'>Dave Yang on ActionScript 2.0</a> - r⌠zne informßcie o AS2.0</li>
<li><a href='http://www.moock.org/as2e/'>ActionScript 2.0 Essentials</a> - zaujφmavΘ ·ryvky z knihy Colina Moocka</li>
<h4><a href='http://interval.cz/__redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=236'>NauΦte se ASP. NET za 21 dnφ</a></h4>
<li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3064'>Interval v roce 2004: Publish or perish!</a></li>
<li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3034'>Jak budovat a rozvφjet e-shop - transakce</a></li>
</ul>
</div>
</div>
<div class='page-right-box cauldron'>
<h3>Diskuznφ kotel</h3>
<div class='page-right-box-in'>
<ul>
<li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2561'>Internet Explorer 7 se jmenuje MyIE2</a><div>149 komentß°∙ </div></li>
<li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=1304'>BezpeΦnost p°edevÜφm û include v PHP</a><div>95 komentß°∙ </div></li>
<li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2965'>ImplementaΦnφ chyby v prohlφ₧eΦφch I.</a><div>59 komentß°∙ </div></li>