ètandardy programovania v ActionScripte
Macromedia Flash MX poskytuje flash dizajnΘrom a programßtorom vÜeobecne vo╛n· ruku pri tvorbe aplikßciφ a internetov²ch strßnok. T²m, ₧e neurΦuje ₧iadne ÜpecifickΘ Ütandardy ani pravidlß pre pφsanie k≤du v ActionScripte, dßva mo₧nos¥ rieÜi¥ problΘm alebo po₧iadavku programßtora r⌠znymi sp⌠sobmi, ale zßrove≥ s¥a₧uje zrozumite╛nos¥ k≤du pre in²ch programßtorov...
╚asto sa stßva, ₧e dokonca sßm autor mß problΘmy s dodatoΦn²m ·pravami v aplikßcii a po urΦitom Φase strßca aj on preh╛ad v k≤de, ktor² sßm prednedßvnom napφsal. VÜeobecne ak mß programßtor problΘm s porozumenφm k≤du kv⌠li jeho nepreh╛adnosti, nebude pre neho jednoduchΘ odstrßni¥ prφpadnΘ chyby, prφpadne nieΦo zmeni¥ alebo pou₧i¥ k≤d v inej aplikßcii.
Macromedia vypracovala dokument, ktor² popisuje systΘm najlepÜφch praktφk pφsania k≤du v ActionScripte a tvorby aplikßcii v programe Macromedia Flash. Aplikßcie, ktorΘ bud· dodr₧iava¥ tieto Ütandardy, by mali by¥ zrozumite╛nejÜie, efektφvnejÜie a pou₧it² k≤d sa bude ╛ahko testova¥ a pou₧φva¥ v ∩alÜφch aplikßcißch.
Dokument je v angliΦtine a pre t²ch, ktor² maj· troÜku s anglick²m jazykom problΘmy, som pripravil tento vo╛n² preklad niektor²ch Φastφ len pre oboznßmenie sa. Preklad neobsahuje vÜetky informßcie zo zdrojovΘho dokumentu, ale na druhej strane som pridal zopßr vlastn²ch postrehov a prφkladov. Firma Macromedia neustßle tento dokument dopσ≥a a obohacuje o novΘ poznatky zo zrealizovan²ch projektov, najnovÜie informßcie v₧dy nßjdete na jej webe.
Pravidlß pri pomenovanφ objektov
Ako zßklad sa pova₧uje sprßvne pomenovanie jednotliv²ch objektov v aplikßcii. ╚i u₧ sa jednß o vygenerovan² s·bor .swf (shockwave file) alebo o ak·ko╛vek met≤du alebo premenn· v k≤de. Pou₧itΘ menß by mali by¥ zrozumite╛nΘ slovß alebo frßzy, ktorΘ zoh╛ad≥uj· primßrnu funkciu alebo ·Φel ka₧dej entity v projekte. Ke∩₧e ActionScript je dynamicky pφsan² jazyk, nßzov by mal obsahova¥ aj prφponu, ktorß definuje o ak² typ objektu sa jednß (movieClip, textField a ∩alÜie). ObyΦajne frßzy typu "podstatnΘ meno - prφslovka" (objectSelected) a "prφdavnΘ meno - podstatnΘ meno" (my_article) s· tie najprirodzenejÜie vo╛by pre nßzov.
Nßzvy funkciφ, met≤d a premenn²ch by mali zaΦφna¥ mal²m pφsmenom (userName). Objekty, a konÜtrukΦnΘ funkcie objektov by mali zaΦφna¥ naopak ve╛k²m pφsmenom (ProductInformation).
Nßzvy premenn²ch m⌠₧u obsahova¥ len pφsmenß, Φφsla a podtrhovnφk (underscore), avÜak nemalo by sa zaΦφna¥ nßzov Φφslom alebo podtrhovnφkom.
Prφklady nesprßvneho zadßvanie nßzvov premenn²ch:
5count = 0; // zaΦφna Φφslom
navigation/bar = true; // obsahuje znak lomeno
navigation bar = false; // obsahuje medzeru
Taktie₧ slovß, ktorΘ s· pou₧φvanΘ samotn²m ActionScriptom, takzvanΘ rezervovanΘ slovß, by nemali nikdy by¥ pou₧itΘ v nßzvoch:
case = false;
with = true;
Ke∩₧e ActionScript je v s·lade so Ütandardami ECMAScript (Standardizing Information and Communication Systems - urΦuj· Ütandardy pre programovacie jazyky), programßtori si m⌠₧u prezrie¥ s·Φasn· ECMA Üpecifikßciu, v ktorej nßjdu zoznam vÜetk²ch rezervovan²ch slov.
ActionScript editor v programe Macromedia Flash MX mß v sebe zabudovan· podporu kompletizßcie k≤du. UrΦite ste sa s t²m pri pφsanφ nejakΘho prφkazu u₧ stretli:
Na to, aby ste t·to v²hodu mohli plne vyu₧φva¥, premennΘ musia by¥ pomenovanΘ pod╛a urΦitΘho formßtu. Ku ka₧dΘmu nßzvu je treba prida¥ prφponu, ktorß indikuje typ premennej. Ak mßte premennΘ sprßvne pomenovanΘ, tak pri pφsanφ k≤du sa vßm automaticky objavφ menu so vÜetk²mi met≤dami a vlastnos¥ami pre dan² typ objektu. Aby sme do tohto vniesli trochu svetla, tu je tabu╛ka prφpon, pri pou₧φvanφ ktor²ch vyu₧ijete t·to v²born· vlastnos¥ flashu:
Object type | Suffix string | Example |
---|---|---|
String | _str | myString_str |
Array | _array | myArray_array |
MovieClip | _mc | myMovieClip_mc |
TextField | _txt | myTextField_txt |
Date | _date | myDate_date |
Sound | _sound | mySound_sound |
XML | _xml | myXML_xml |
Color | _color | myColor_color |
Pre t²ch, ktor² Φasto vyu₧φvaj· komponenty, prikladßm aj tabu╛ku najpou₧φvanejÜφch:
Component Object | Suffix string | Example |
---|---|---|
Check Box | _ch | myCheckBox_ch |
Push Button | _pb | myPushButton_pb |
Radio Button | _rb | myRadioButton_rb |
List Box | _lb | myListBox_lb |
Scroll Bar | _sb | myScrollBar_sb |
Combo Box | _cb | myComboBox_cb |
Scroll Pane | _sp | myScrollPane_sp |
Component Object | Suffix string | Example |
---|---|---|
Message Box | _mb | myMessageBox_mb |
Draggable Pane | _dp | myDraggablePane_dp |
Ticker | _tick | myTicker_tick |
Tree | _tree | myTree_tree |
Tree Node | _tn | myTreeNode_tn |
Icon Button | _ib | myIconButton_ib |
Progress Bar | _pr | myProgressBar_pr |
Component Object | Suffix string | Example |
---|---|---|
Bar Chart | _bc | myBarChart_bc |
Line Chart | _lc | myLineChart_lc |
Pie Chart | _pc | myPieChart_pc |
Treba si vÜak pamΣta¥, ₧e predchßdzaj·ci formßt pφsania k≤du je len odpor·Φanie a nie striktnΘ pravidlo, ktorΘho sa treba nevyhnutne dr₧a¥. Najd⌠le₧itejÜie je zvoli¥ si urΦit· schΘmu, na zßklade ktorej budete voli¥ nßzvy a t·to sa sna₧i¥ dodr₧iava¥. Ka₧dΘmu programßtorovi vyhovuje in² princφp pomenovania objektov a d·fam, ₧e vßm tieto drobnΘ rady aspo≥ sΦasti pomohli nßjs¥ si ten sprßvny prßve pre vßs.
_root verzus _global
Niektor² sa mo₧no zasmej·, ale nßjdu sa aj tak² sk·senφ programßtori, ktorφ by nevedeli vysvetli¥ rozdiel medzi "_root" a "_global". Oboma v²razmi sa zapisuje cesta k premennej v actionScripte. V²raz "_root" oznaΦuje hlavn· Φasov· os v ka₧dom movie clipe (nenaÜiel som vhodn² v²raz pri preklade slov "movie clip", ale myslφm si, ₧e vÜetci vieme o Φom je reΦ). Pre ka₧d² dynamicky naΦφtan² movie clip existuje v₧dy len jedna hlavnß Φasovß os a teda len jedna "_root".
Ak si chceme vytvori¥ premenn· na hlavnej Φasovej osi, z akΘhoko╛vek miesta v movie clipe m⌠₧eme zada¥ k≤d _root.nazovPremennej="hodnota premennej";. Ak by sme chceli opΣtovne zφska¥ hodnotu premennej (naprφklad si ju chceme necha¥ zobrazi¥ v output okne), kdeko╛vek v movie clipe zadßme trace(_root.nazovPremennej);. V₧dy treba pou₧i¥ "_root" pri zφskavanφ hodnoty premennej. T·to premenn· m⌠₧eme Φφta¥ t²mto sp⌠sobom len z danΘho movie clipu. Ak mßme vo flash playeri naΦφtan²ch viac movie clipov, tak z ostatn²ch movie clipov sa u₧ touto cestou k premennej nedostaneme.
Na druhej strane, "_global" sa vz¥ahuje na vÜetky existuj·ce movie clipy v rßmci flash playeru. VÜeobecne sa odpor·Φa pou₧φva¥ _global namiesto odkazovania na hlavn· Φasov· os. Ak chceme zada¥ globßlnu premenn·, kdeko╛vek v akomko╛vek movie clipe, ktor² sme dynamicky naΦφtali do flash playeru, m⌠₧eme zada¥ _global.nazovPremennej="hodnota premennej";. K premennej sa opΣtovne dostaneme z akΘhoko╛vek miesta v akomko╛vek movie clipe vo flash playeri a staΦφ, ak pou₧ijeme len nßzov premennej bez cesty trace(nazovPremennej);. Ale pozor, mo₧no to troÜku lßka pou₧i¥ len nßzov premennej pri ∩alÜom prepφsan² hodnoty premennej. Tu je opΣ¥ potrebne pou₧i¥ aj cestu k premennej _global.nazovPemennej="zmenena hodnota";.
V²hodu pou₧φvania "_global" naozaj pocφtite, ak pracujete na vΣΦÜφch projektoch, ktorΘ Φasto dynamicky na¥ahuj· a ma₧· movie clipy z flash playeru, ale mo₧no nßjdete uplatnenie aj pri menÜφch projektoch, ktorΘ plßnujete v bud·cnosti ∩alej rozÜirova¥ alebo opΣtovne pou₧φva¥.
Framy ako stavy aplikßcie
Programßtori ve╛mi Φasto pφÜu ve╛a riadkov k≤du do jednotliv²ch snφmkou, ktorΘ symbolizuj· stavy aplikßcie. Tejto praktiky sa treba vyvarova¥. Pre sprßvnu organizßciu k≤du je sprßvne pou₧i¥ k╛·ΦovΘ snφmky, avÜak vÜetok k≤d, potrebn² pre konkrΘtny stav aplikßcie, umiestnite do funkcie a v danom k╛·Φovom snφmku len t·to funkciu zavolßte. Pre lepÜiu orientßciu si prezrite obrßzok:
Mßme vrstvu "Actions", v ktorej s· vÜetky funkcie potrebnΘ pre chod aplikßcie a pre zmeny aplikßcie v jednotliv²ch stavoch. Naprφklad:
function zmenyPriStave2 (){//zmeny}
function zmenyPriStave3 (){//zmeny}
...
V druhej vrstve "States" sa nachßdzaj· jednotlivΘ stavy aplikßcie umiestnenΘ v k╛·Φov²ch snφmkach. V ka₧dom snφmku je len k≤d, ktor² volß funkciu z vrstvy "Actions", aby previedla vÜetky zmeny nevyhnutnΘ pre tento stav aplikßcie. Naprφklad na prvom snφmku bude k≤d zmenyPriStave1(); a na druhom snφmku bude k≤d zmenyPriStave2();. Taktie₧ je mo₧nΘ pou₧i¥ movie clipy, pripojenΘ k hlavnΘmu movie clipu, pomocou prφkazu attachMovie() pre reprezentovanie jednotliv²ch stavov aplikßcie (dial≤govΘ oknß a podobne).
Predchßdzanie prira∩ovania k≤du Movie Clipom a Buttonom
Jedna dobrß rada je predchßdzanie prira∩ovania k≤du jednotliv²m movie clipom alebo tlaΦφtkam, ak to naozaj nie je absol·tne potrebne. Ak sa vyskytne situßcia, kedy je naozaj nevyhnutnΘ priradi¥ k≤d tlaΦφtku alebo movie clipu, pou₧ite len minimßlne mno₧stvo k≤du. ObyΦajne sa to rieÜi pomocou volania funkcie, naprφklad:
Ak zavolßme funkciu, presmerujeme vÜetku funkΦnos¥ na hlavn· Φasov· os alebo na inΘ miesto, kde mßme t·to funkciu zadefinovan·. T²mto sa stßva k≤d ove╛a preh╛adnejÜφ, ╛ahÜie editovate╛nejÜφ a samozrejme nesk⌠r ho m⌠₧eme vyu₧i¥ v ∩alÜφch aplikßcißch.
V dokumente "ActionScript Coding Standards" autora Michaela Williamsa je podobn²ch rßd ove╛a viac, ako naprφklad:
- pou₧φvanie komentßrov v k≤de
- usporiadanie Φasovej osi
- adresovanie premenn²ch relatφvnou cestou
- preΦo udr₧iava¥ akcie na jednom mieste
- pou₧φva¥ Φi nepou₧φva¥ externΘ .as s·bory
- inicializßcia
- pou₧φvanie var pri lokßlnych premenn²ch
- vytvßranie objektov
- dedenie
- optimalizßcia aplikßcie
- ako neplytva¥ pamΣ¥ou
Ak to naozaj myslφte s programovanφm vß₧ne, urΦite by vßm tento dokument nemal ch²ba¥ a uvidφte, ₧e aj pre sk·sen²ch senior programßtorov sa tam nßjde nieΦo novΘho. (Ak by bol zßujem o preklad ∩alÜφch Φastφ dokumentu, kontaktujte redakciu.)