Ацтионсцрипт

(преусмерено са ActionScript)

АцтионСцрипт (Слика десно) представља списак акција у Фласху 4 којима је било могуће утицати на ток филма. Акције су се придруживале одређеном фрејму или догађају над симболом типа дугме. Из списка се види да су могућности програмирања пре свега биле оријентисане на управљање током филма (заустављање, кретање, скокови на одређене фрејмове), уз скромно присуство командних структура, наредбе гранања и лооп петље. Наредба Цалл имала је за задатак позив блока команди придружених неком фрејму, симулирајући на тај начин корисничку функцију. Овакав приступ сигурно да није омогућавао комотан рад с програмерске тачке гледишта, али је довео до померања са акцента програма са анимације ка интеракцији, што је за резултат имало појаву ширег спектра апликација рађених у Фласху.[1]

Списак акција у Фласху

Пета верзија програма представља квалитативни помак у правцу програмирања, одлучено је да Фласх постане озбиљан алат за програмирање. У Фласху се појављује АцтионСцрипт.

АцтионСцрипт је скрипт језик чији је циљ контрола објеката у Фласх филмовима, креирање навигационих и интерактивних елемената, и за креирање филмова високог степена интеракције и wеб апликација.

Сцрипт језик

уреди

Скрипт језик је програмски језик који се користи за манипулацију, прилагођење и аутоматизацију постојећег система. У таквим системима, функционалност је већ обезбеђена путем корисничког интерфејса, а скрипт језик представља механизам за проширење функционасти програмском контролом. За постојећи систем се каже да обезбеђује домаћинско окружење за објекте и могућности које контролише скрипт језик.

Асоцијација европских произвођача компјутера (ЕЦМА[2] – тхе Еуропеан Цомпутерс Мануфацтурерс Ассоциатион, www.ецма.цх) саставила је документ под називом ЕЦМА-262 чији је циљ стандардизација језика ЈаваСцрипт. АцтионСцрипт заснива се на спецификацији овог документа. -:- https://web.archive.org/web/20140606181403/http://www.ecma.ch/ecma1/STAND/ecma-262.htm

Елементи језика

уреди

Синтакса АцтионСцрипта подсећа на Јаву. Разлика је у томе што језик упућује на једноставност у коришћењу. На пример, промењива не мора да има декларисан тип нити се типови повезују са особинама објекта, а дефинисане функције не морају бити декларисане у тексту пре њиховог позива.

АцтионСцрипт се заснива на објектима: основни језик и окружење Фласха обезбеђују се путем објеката, а сам програм у АцтионСцрипту је пут комуникацији међу објектима. Сам објекат је колекција особина (пропертиес) које могу имати атрибуте који одређују начин коришћења особине (на пример – РеадОнлy). Особине су контејнери који садржавају друге објекте, примитивне вредности или методе. Објекат у овом смислу представља референцу на објекат, примитивна вредност је вредност неког примитивног типа података, а метод је функција која се с објектом повезује путем особине.

АцтионСцрипт 2.0

уреди

АцтионСцрипт 2.0 уведен је у септембру 2003год. са издавањем Фласх МКС 2004 и његовог одговарајућег плејера, Фласх Плаyер 7. Са АцтионСцрипт 2.0 , програмери могу да ограниче променљиве на одређени тип, неусклађености и грешке могу се наћи приликом компајлирања. АцтионСцрипт 2.0 је такође представио цласс-басед синтаксу, тако да су програмери у могућности да креирају класе и интерфејсе. Ова верзија влада делимично на ЕЦМАСцрипт. Четврто издање драфт спецификације .

Типови података и променљиве

уреди

Тип података представља врсту информације коју променљива или елемент АцтионСцрипта може да садржи. Типови података деле се на примитивне и референтне типове, а постоје и специјални типови података.

  • Примитивни типови су стринг, нумбер и боолеан
  • Референтни типови су објецт, фунцтион и мовиеЦлип
  • Специјални типови података: нулл и Ундефинед

Референтни типови као вредност имају адресу свог садржаја. Тип мовиеЦлип је графичка репрезентација елемената Фласха.

вар мyВар;
траце (“тyпеоф (мyВар): ” + тyпеоф (мyВар)); // ундефинед
мyВар = труе;
траце (“тyпеоф (мyВар): ” + тyпеоф (мyВар)); // боолеан
мyВар = 0;
траце (“тyпеоф (мyВар): ” + тyпеоф (мyВар)); // нумбер
мyВар = “мy Стринг”;
траце (“тyпеоф (мyВар): ” + тyпеоф (мyВар)); // стринг
мyВар = неw Арраy ();
траце (“тyпеоф (мyВар): ” + тyпеоф (мyВар)); // објецт
мyВар = траце;
траце (“тyпеоф (мyВар): ” + тyпеоф (мyВар)); // фунцтион
мyВар (“тyпеоф (мyВар): ” + тyпеоф (мyВар)); // фунцтион


Променљива се може декларисати са вар. Декларација одређује њено име и локалност, односно променљива тада постаје локална у блоку у коме је декларисана. У наведеном примеру кориштене су функције траце, која служи за испис стринг вредности израза свог аргумента у посебни излазни прозор (корисно при тестирању програма), и тyпеоф, која враћа назив типа израза свог аргумента. Двострука коса црта (//) представља почетак линијског коментара, при интерпретацији се игноришу сви карактери у линији након ове ознаке (коментар у више линија поставља се између ознака /* и */). Први позив функције траце у излазни прозор исписује “тyпеоф (мyВар): ундефинед” јер променљивој није додељена вредност, тако да јој није одређен ни тип. Додела вредности одређује тип променљиве. То значи да променљива може да мења свој тип. У примеру, последњом доделом (мyВар = траце) је променљивој додељена функција траце, значи она је типа фунцтион, она постаје функција која се понаша на исти начин као и траце, тако да последња линија позива променљиву мyВар као функцију и добија се такође одзив у излазном прозору.

Променљива се не мора декларисати. У том случају сматра се за глобалну.

АцтионСцрипт врши аутоматску конверзију типова при извођењу операција, тако да недефинисане променљиве могу учествовати у операцијама, где се преводе као неутрални елемент сабирања (логичко – фалсе, нумерички – 0, стринг – “”).

Оператори

уреди

АцтионСцрипт дефинише скуп уграђених оператора који се могу поделити у следеће групе: нумерички оператори, оператори поређења, Стринг оператори, логички оператори, бит-оријентисани оператори, оператори једнакости и оператори доделе. Као и у другим програмским језицима, оператори су хијерархијски одређени по приоритету извршавања операција.

Занимљиви оператори су, рецимо, оператори доделе, што илуструје следећи пример:
вар мyСтринг = “мy”;
мyСтринг += “ Стринг”;
траце (“мyСтринг: “ + мyСтринг); // “мyСтринг: мy Стринг”
Прва линија декларише променљиву мyСтринг и додељује му (“обична” додела) Стринг вредност “мy”. У другој линија кода такође је додела, али са оператором +=, што семантички представља следеће: сабери вредност операнда с леве стране оператора (променљиву мyСтринг) са операндом с десне стране (“ Стринг”) и резултат сабирања додели променљивој с леве стране.

Други пример илуструје операторе инкрементације (++):
вар мyВар = 0;
траце (“мyВар: “ + мyВар); // “мyВар: 0“
траце (“мyВар++: “ + мyВар++); // “мyВар++: 0“
траце (“мyВар: “ + мyВар); // “мyВар: 1“
траце (“++мyВар: “ + ++мyВар); // “++мyВар: 2“
траце (“мyВар: “ + мyВар); // “мyВар: 2“
Пост-инкрементација повећава вредност променљиве након њеног учествовања у изразу, а пре-инкрементација прво повећава вредност променљиве која даје своју нову вредност за израчунавање израза.

Трећи пример, условна додела:
вар мyБоол = труе;
вар нотБоол = !мyБоол;
траце (“мyБоол: “ + ((мyБоол) ? мyБоол : нотБоол));
траце (“нотБоол: “ + ((нотБоол) ? мyБоол : нотБоол));
Условна додела је тернарни оператор. Први операнд је логички израз који се израчунава. Ако је израчунао труе, оператор рачуна вредност другог операнда (иза знака питања) и то враћа као резултат, иначе (израчунато фалсе) се рачуна вредност трећег операнда (иза двотачке) и то постаје резултат. У овом примеру први позив траце исписује “мyБоол: труе”, јер се испитује услов мyБоол (труе) и враћа вредност другог операнда (мyБоол има вредност труе), док други позив исписује “нотБоол: фалсе” јер је услов нетачан (нотБоол, при додели је !мyБоол, негација од труе) па се враћа вредност трећег операнда (нотБоол је фалсе).

Гранање и петље

уреди

Наредба иф у АцтионСцрипту има следећу синтаксу:

иф (цондитион) {

     //    statements

} елсе {

     //    statements

}
Овде је цондитион логички израз, обавезно наведен у заградама, на основу којег се доноси одлука да ли се извршава код блока наредби унутар витричастих заграда. Блок наредби се увек наводи унутар витричастих заграда, а поједине наредбе у блоку раздвајају се тачка-зарезом (;). У случају само једне наредбе није неопходно навођење витричастих заграда. Друга грана (елсе) такође није обавезна. У АцтионСцрипту код Фласха 5 не постоји сwитцх наредба за вишеструко гранање, а то је једна од новина које доноси нова верзија програма, Фласх MX[3].

Понављање дела кода обезбеђено је петљама фор, wхиле, до-wхиле и фор-ин. У свим петљама могу се користити команде цонтинуе, за скок на следећу итерацију, и бреак, за напуштање петље.

фор (инит; цондитион; неxт) {

     //    statements

}
Слично као и у језику Јава, фор петља задаје се с три параметра: иницијална вредност контролне променљиве, излазни услов и израз за израчунавање пре наредне итерације. По дефиницији је дозвољено изостављање било ког од ова три дела (остаје тачка-зарез). Израз инит се израчунава само једном, пре почетка прве итерације, израз цондитион мора бити логички и израчунава се пре сваке итерације и одлучује да ли се наставља са итерацијом (израчунато труе) или не (фалсе), израз неxт израчунава се на крају сваке итерације. Оваква конструкција дозвољава много већу слободу при баратању петљом у односу на, рецимо, паскалолику конструкцију. Ипак, уобичајено се користи баш симулација те основне конструкције, постављањем иницијалне вредности контролне променљиве у првом делу, поређење контролне променљиве с неком излазном вредношћу у другом делу и инкрементирање или декрементирање контролне променљиве у трећем делу.

wхиле (цондитион) {

     //    statements

}
Догод је услов цондитион испуњен извршава се блок наредби петље wхиле. Ово испитивање може бити и нумеричко, у ком случају се испитује различитост од вредности 0.

до {

     //    statements

} wхиле (цондитион)
Слично је и код петље до-wхиле, с разликом што се прво извршава блок наредби, па тек онда проверава услов (што значи, код блока извршава се бар једном). Ово подсећа на паскалско репеат-унтил, а разлика је код услова – до-wхиле ради док је испуњен услов, а репеат-унтил прекида по испуњењу услова.

фор (вариаблеитерант ин објецт){

     //    statements

}
Петља фор-ин користи се особинама објекта. Пример:

мyОбјецт = {наме:'Тара', аге:27, цитy:'Сан Францисцо'};
фор (наме ин мyОбјецт) {

     trace ("myObject." + name + " = " + myObject [name]);

}
Пример је из речника АцтионСцрипта 5. Излаз изгледа овако:

мyОбјецт.наме = Тара
мyОбјецт.аге = 27
мyОбјецт.цитy = Сан Францисцо
Прва линија кода даје један начин задавања објекта. Објекат мyОбјецт има 3 особине, свакој је додељена одређена вредност. Променљивој наме у фор-ин петљи придружују се имена особина објекта мyОбјецт, редом кроз итерације. Пример такође приказује два начина приступа вредностима особина објекта. У излазном прозору приказан је приказ референцирања "тачком", односно наводи се име објекта, тачка и следи име особине. То и јесте уобичајен начин референцирања, али није било могуће унутар фор-ин петље позвати мyОбјецт.наме, јер би се то односило на особину наме објекта, а не променљиву петље. Стога је коришћена референца мyОбјецт [наме], која израчунава израз у угластим заградама (вредност променљиве наме) и потом тражи вредност одговарајуће особине објекта.

Функције

уреди

Дефиниција функције:

фунцтион мyФунц ([арг0, арг1,...аргН]) {

     //    statements

}
// или
фунцтион ([арг0, арг1,...аргН]) {

     //    statements

}
Функција је блок кода који се може више пута користити позивом функције. Пример позива био би мyФунц ([пар1, пар2,...парН]). У загради овде налазе се параметри функције, које она при извршавању она прима као аргументе. Угласте заграде су у примеру наведене у смислу БНФ нотације, односно указују на опциону појаву параметара и аргумената. Функција ове параметре види као вредносне параметре, нема варијабилних параметара, те се не могу мењати вредности ових параметара ван локалности функције, уз дужну пажњу референтним подацима, где се може директно приступати особинама објекта, на пример.

Улазне параметре функција види као низ аргументс, број декларисаних именованих параметара функције не мора да се поклапа са бројем аргумената који се прослеђују функцији. Приступ именованим параметрима у функцији могућ је директно навођењем имена параметра, а приступ произвољном параметру остварује се као приступ елементу низа аргументс на одређеном индексу. Пример:

фунцтион мyФунц () {

     var myVar;
for (var i = 0; i < arguments.length; i++) { myVar += arguments [i]; } trace (“myVar: ” + myVar);

}
мyФунц (3, 4, “то”, 1, 1); // “мyВар: 7то11”
У примеру се локална промењива мyВар само декларише, иницијално нема вредност, значи типа је ундефинед. Прво сабирање је са аргументом типа нумбер, па се променљива конвертује у вредност 0, сабира са 3 и добија вредност 3. Сабирање са другим аргументом је сабирање два броја, па мyВар добија вредност 7. Трећи аргумент је типа стринг, што повлачи конверзију мyВар у стринг. Четврти и пети аргумент су бројеви, али се конвертују у стринг. Тако мyВар на крају добија вредност "7то11".

Функција може да врати вредност коришћењем наредбе ретурн ретурнВалуе, овде ретурнВалуе представља израз чију вредност функција враћа. Коришћењем саме наредбе ретурн (без израза) само се напушта функција. Наредба ретурн је опциона у функцији, а може се појављивати на више места у коду функције (обично након испуњења неког услова), враћајући различите вредности, чак и различитог типа. Пример:

фунцтион ретурнер (инпутВалуе) {

     if (inputValue < 0) return;
     if (inputValue == 0) return false;
     if (inputValue == 1) return 0;
     if (inputValue == 2) return “”;
     if (inputValue == 3) return new Array ();
     if (inputValue == 4) return trace;

}
фор (вар и = -1; и < 6; и++) {

     trace (i + “: ” + typeof (returner (i)));

}
/* оутпут:
-1: ундефинед
0: боолеан
1: нумбер
2: стринг
3: објецт
4: фунцтион
5: ундефинед
*/
Овде је избегнуто дубоко угњежђавање иф-елсе, јер се из функције излази по првом испуњењу неког услова.

У АцтионСцрипту постоје предефинисане функције, а могу се дефинисати и нове. Често се функција придружује неком објекту, тада она постаје метод објекта.

Објекти

уреди

Објекат је скуп особина које могу имати вредности неког типа. Сваки објекат јединствено се идентификује својим именом. Већ поменути пример:

мyОбјецт = {наме:'Тара', аге:27, цитy:'Сан Францисцо'};
Објекат мyОбјецт има три особине и свакој особини додељена је вредност. Приступ особини аге, на пример, може се остварити са мyОбјецт.аге или мyОбјецт [“аге”]. Додавање нове особине могуће је: мyОбјецт.стате = ‘Цалифорниа’, као и модификација постојеће особине: мyОбјецт.аге = 28.

фунцтион персон (наме, аге, цитy) {

     this.name = name;
     this.age = age;
     this.city = city;

}
мyОбјецт = неw персон (‘Тара’, 27, ‘Сан Францисцо’);
Овај код као крајњи резултат даје такође објекат мyОбјецт са потпуно истим особинама и вредностима особина као и претходни пример. Разлика постоји. Сада је мyОбјецт инстанца класе персон, а функција персон назива се конструктором класе персон. Објекат се инстанцира позивањем кључне речи неw и конструктора. Кључна реч тхис у конструктору референцира на објекат који се креира. Следећи пример додаје метод класи персон:

фунцтион схоwПерсон () {

     var myString = this.name + “, “ + this.age + “, “ + this.city;
     trace (myString);

}
персон.прототyпе.схоw = схоwПерсон;
мyОбјецт.схоw (); // “Тара, 27, Сан Францисцо”
Све функције поседују особину прототyпе која се аутоматски креира при дефиницији функције. При креирању новог објекта конструктором, све особине и методе конструкторске особине прототyпе постају особине и методе особине __прото__ новокреираног објекта. Када се референцира нека особина или метода објекта, АцтионСцрипт тражи постоји ли таква особина или метода, ако не постоји, тражи се у оквиру особина и метода његовог __прото__ објекта (и даље __прото__.__прото__, ...). Ово је наслеђивање у АцтионСцрипту. Уобичајена пракса је додељивање метода особини прототyпе конструктора, као што и стоји у наведеном примеру.

АцтионСцрипт већ долази са добрим скупом предефинисаних објеката.

Постоји скуп уграђених објеката преузетих из ЕЦМА спецификације:

  • Објецт – најопштија класа објеката
  • Арраy – низ, са методама манипулацију низом, додавање и узимање елемента низа са почетка или краја, сортирање итд, особина ленгтх је дужина низа...
  • Стринг – методе за манипулацију стринговима, подниз, конкатенација...
  • Боолеан
  • Нумбер – константе, најмања и највећа вредност, бесконачност...
  • Матх – аритметичке и тригонометријске функције, математичке константе...
  • Дате – датум и време

Поред ових, уграђени су и битни објекти за Фласхово окружење:

  • МовиеЦлип – особине од значаја за визуелну репрезентацију објекта, ширина, висина, хоризонтална и вертикална позиција, видљивост, провидност, ротација...; методе за контролу особина, за кретање по временској оси, креирање и уништавање инстанци, превлачење објеката...
  • Селецтион – контрола текстуалних поља
  • Моусе – скривање и показивање показивача миша
  • Кеy – константе специјалних тастера тастатуре, кодови карактера...
  • Цолор – трансформације боје МовиеЦлип објеката...
  • Соунд – контрола звука и звучних ефеката
  • XМЛ – учитавање, слање, парсирање, изградња XМЛ докумената...
  • XМЛСоцкет – стална веза са сервером, успостављање и прекид везе...

У првом примеру, пасијанс, представљен је део понашања које се реализује објектом мовиеЦлип, а трећи пример, wеб меморија, представља објекте XМЛ и XМЛСоцкет[4].

Програмирање у АцтионСцрипту

уреди

Програмски елементи, акције, у Фласховом филму могу се налазити на више места. Како се филм одвија по временској оси подељеној на фрејмове, делови кода могу бити додељени фрејмовима. Тај код извршава се када се филм нађе на одређеном фрејму. Поред тога, инстанце симбола типа дугме такође се могу програмирати за извођење одређених акција при појави неког догађаја, попут притиска на дугме. Инстанце симбола типа филмски клип такође могу реаговати на неке догађаје ако им се придруже потребне акције. Уз то, симбол типа филмски клип је такође филм по својој дефиницији, поседује своју временску осу, а може садржавати и друге инстанце симбола типа дугме или филмски клип, па се цела прича може поновити у контексту дефиниције симбола. Ово даје могућност велике збрке и раштркавања кода на све могуће стране, што с друге стране онемогућава коректно праћење тока филма, налажење грешака, и слично. Стога је препорука држање кода на мање места, поготово дефиниције променљивих, функција и објеката, рецимо у првом фрејму филма или дефиниције симбола, док се за обраду догађаја може само навести позив већ дефинисане функције или метода неког објекта.

Догађаји инстанци симбола типа дугме

уреди

Код који се придружује инстанци симбола типа дугме налази се у хендлеру он:

он (моусеЕвент) {

     //    statements

}
За једно инстанцу може се поставити више хендлера, зависно од догађаја моусеЕвент. Један хендлер може опслуживати више догађаја раздвојених зарезом у заглављу хендлера. Код придружен хендлеру извршава се када се деси неки од догађаја наведених у заглављу хендлера. Следи опис догађаја које препознаје објекат типа буттон:

  • пресс – дугме миша је притиснуто док је показивач изнад дугмета
  • релеасе – дугме миша је отпуштено док је показивач изнад дугмета
  • релеасеОутсиде – дугме миша је отпуштено док је показивач ван дугмета
  • роллОвер – показивач миша креће се изнад дугмета
  • роллОут – показивач миша је напустио површину дугмета
  • драгОвер – док је показивач изнад дугмета, дугме миша је притиснуто, показивач померен ван површине дугмета и потом враћен изнад
  • драгОут – док је показивач изнад дугмета, дугме миша је притиснуто и потом показивач померен ван површине дугмета
  • кеyПресс (“кеy”) – тастер кеy је притиснут

Догађаји инстанце симбола типа филмски клип

уреди

Инстанца симбола типа филмски клип такође реагује на догађаје.

онЦлипЕвент (мовиеЕвент) {

     //    statements

}
Овде је мовиеЕвент неки од следећих догађаја:

  • лоад – акција се иницира инстанцирањем објекта његовом појавом у временској оси
  • унлоад – акција се иницира у првом фрејму након уклањања објекта са временске осе, а изводи се пре било које акције везане за посматрани фрејм
  • ентерФраме – акција се иницира при сваком фрејму, а изводи се након свих акција везаних за посматрани фрејм
  • моусеМове – акција се иницира при сваком померању миша
  • моусеДоwн – акција се иницира притиском на лево дугме миша
  • моусеУп – акција се иницира отпуштањем левог дугмета миша
  • кеyДоwн – акција се иницира притиском на неки тастер
  • кеyУп – акција се иницира отпуштањем тастера
  • дата – акција се иницира пријемом података при учитавању

Види још

уреди

Спољашње везе

уреди

Референце

уреди