Navigace

Hlavnφ menu

 

è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:

_count = 5; // zaΦφna podtrhovnφkom
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:

switch = "on";
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:

Podpora kompletizßcie k≤du ActionScriptu

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 typeSuffix stringExample
String_strmyString_str
Array_arraymyArray_array
MovieClip_mcmyMovieClip_mc
TextField_txtmyTextField_txt
Date_datemyDate_date
Sound_soundmySound_sound
XML_xmlmyXML_xml
Color_colormyColor_color

Pre t²ch, ktor² Φasto vyu₧φvaj· komponenty, prikladßm aj tabu╛ku najpou₧φvanejÜφch:

Flash UI Component Set 1
Component ObjectSuffix stringExample
Check Box_chmyCheckBox_ch
Push Button_pbmyPushButton_pb
Radio Button_rbmyRadioButton_rb
List Box_lbmyListBox_lb
Scroll Bar_sbmyScrollBar_sb
Combo Box_cbmyComboBox_cb
Scroll Pane_spmyScrollPane_sp
Flash UI Component Set 2
Component ObjectSuffix stringExample
Message Box_mbmyMessageBox_mb
Draggable Pane_dpmyDraggablePane_dp
Ticker_tickmyTicker_tick
Tree_treemyTree_tree
Tree Node_tnmyTreeNode_tn
Icon Button_ibmyIconButton_ib
Progress Bar_prmyProgressBar_pr
Flash Charting Components
Component ObjectSuffix stringExample
Bar Chart_bcmyBarChart_bc
Line Chart_lcmyLineChart_lc
Pie Chart_pcmyPieChart_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:

Prφklad aplikßcie s preloaderom

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 zmenyPriStave1 (){//zmeny}
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:

mojeTlacitko.onMouseDown=function(){_parent.doMouseDown(this)};

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.)

Äigmond, Milan (6.8. 2003)