Wprowadzenie do języka ActionScript 3.0

Informacje o języku ActionScript

ActionScript to język programowania przeznaczony dla środowisk wykonawczych Adobe® Flash® Player i Adobe® AIR™. Umożliwia realizację funkcji interaktywnych, przetwarzania danych oraz różnorodnej innej funkcjonalności w ramach treści i aplikacji przeznaczonych dla środowisk Flash, Flex i AIR.

Kod w języku ActionScript jest wykonywany w maszynie wirtualnej ActionScript Virtual Machine (AVM), wchodzącej w skład programu Flash Player i środowiska AIR. Kod ActionScript jest zwykle przekształcany na format kodu bajtowego przez kompilator. ( Kod bajtowy jest typem języka programowania, który jest zapisywany i rozumiany przez komputery. Przykładami kompilatorów są: kompilator wbudowany w programie Adobe® Flash® Professional, wbudowany w programie Adobe® Flash® Builder™ oraz dostępny w pakiecie Adobe® Flex™ SDK. Kod bajtowy jest osadzony w plikach SWF wykonywanych przez program Flash Player i środowisko AIR.

ActionScript 3.0 oferuje solidny model programowania znany projektantom z podstawową wiedzą na temat programowania obiektowego. Do kluczowych funkcji języka ActionScript 3.0, które stanowią udoskonalenie w porównaniu z poprzednimi wersjami ActionScript, należą:

  • Nowa maszyna wirtualna ActionScript Virtual Machine, nazwana AVM2, w której stosowany jest nowy zestaw instrukcji kodu bajtowego i która charakteryzuje się znacznie wyższą wydajnością.

  • Bardziej nowoczesna baza kodu kompilatora, która zapewnia dokładniejszą optymalizację niż poprzednie wersje kompilatora

  • Rozbudowany i udoskonalony interfejs programowania aplikacji (API, ang. application programming interface) umożliwiający sterowanie obiektami na niskim poziomie i oferujący prawdziwie obiektowy model programowania.

  • Interfejs API XML oparty na specyfikacji ECMAScript for XML (E4X) (ECMA-357 edition 2). E4X jest rozszerzeniem języka ECMAScript, w którym dodano typ XML jako jeden z rodzimych typów.

  • Model zdarzeń oparty na specyfikacji Document Object Model (DOM) Level 3 Events Specification.

Zalety języka ActionScript 3.0

ActionScript w wersji 3.0 jest czymś więcej niż język skryptowy, którym w istocie we wcześniejszych wersjach. Został opracowany z myślą tworzeniu złożonych aplikacji operujących na obszernych zbiorach danych oraz opartych na obiektowo-zorientowanych fragmentach kodu przeznaczonych do wielokrotnego wykorzystania w różnych projektach. Język ActionScript 3.0 nie jest wymagany w przypadku zawartości działającej w programie Adobe Flash Player. Jednak umożliwia zwiększanie wydajności, ponieważ zapewnia dostęp do AVM2 — wirtualnej maszyny języka ActionScript 3.0. Kod ActionScript 3.0 może być wykonywany do dziesięciu razy szybciej niż starszy kod ActionScript.

Poprzednia wersja ActionScript Virtual Machine, AVM1, wykonuje kod ActionScript 1.0 i ActionScript 2.0. Programy Flash Player 9 i 10 obsługują wersję AVM1, dzięki czemu zapewniają kompatybilność wsteczną.

Co nowego w języku ActionScript 3.0

Język ActionScript 3.0 zawiera wiele klas i funkcji podobnych do stosowanych w językach ActionScript 1.0 i 2.0. Jednak ActionScript 3.0 różni się od poprzednich wersji ActionScript pod względem architektury i koncepcji. Udoskonalenia wprowadzone w wersji ActionScript 3.0 to między innymi nowe elementy języka podstawowego i udoskonalony interfejs API programu, który zapewnia większą kontrolę nad obiektami niskopoziomowymi.

Cechy i elementy języka podstawowego

Język podstawowy to opis bazowych elementów języka programowania, takich jak instrukcje, wyrażenia, warunki, pętle i typy. Język ActionScript 3.0 zawiera wiele elementów, które przyspieszają proces programowania.

Wyjątki w czasie wykonywania

Środowisko języka ActionScript 3.0 sygnalizuje więcej rodzajów błędów niż poprzednie wersje języka ActionScript. Wyjątki w czasie wykonywania odzwierciedlają typowe błędy, ułatwiając proces debugowania i umożliwiając tworzenie aplikacji, które niezawodnie obsługują wszelkie błędy. Błędy w czasie wykonywania mogą być zgłaszane razem z zapisami śladu stosu, informacjami o pliku źródłowym i numerze wiersza, co znacznie przyspiesza lokalizowanie błędów.

Obsługa typów w czasie wykonywania

W języku ActionScript 3.0 informacje o typach są w czasie wykonywania zachowywane. Te informacje są wykorzystywane w celu sprawdzania typu w czasie wykonywania, co poprawia bezpieczeństwo typów systemowych. Informacje o typach są też wykorzystywane przy tworzeniu reprezentacji zmiennych w rodzimej formie maszynowej, co przyspiesza wykonywanie kodu i ogranicza zużycie pamięci. W języku ActionScript 2.0 adnotacje dotyczące typów są tworzone głównie przez programistę i wszystkie wartości są dynamicznie wpisywane w czasie wykonywania.

Klasy zapieczętowane

W języku ActionScript 3.0 objęto pojęcie klas zapieczętowanych. Klasa zapieczętowana ma ustalony zestaw właściwości i metod zdefiniowany w czasie kompilacji; nie można do niej dodawać nowych właściwości ani metod. Brak możliwości zmiany klasy w czasie wykonywania umożliwia dokładniejsze sprawdzanie czasu kompilacji, co zwiększa niezawodność programów. Optymalizuje również wykorzystanie pamięci, ponieważ nie wymaga tworzenia wewnętrznej tabeli mieszającej dla każdej instancji obiektu. Nadal możliwe jest tworzenie klas dynamicznych, które jednak muszą być deklarowane ze słowem kluczowym dynamic W języku ActionScript 3.0 wszystkie klasy są domyślnie zapieczętowane, ale dodanie w deklaracji słowa kluczowego dynamic umożliwia utworzenie klasy dynamicznej.

Zamknięcia metod

W języku ActionScript 3.0 zamknięcia metod mogą automatycznie zapamiętywać, do jakiej instancji obiektu pierwotnie należały. Ta funkcja jest przydatna przy obsłudze zdarzeń. W języku ActionScript 2.0 zamknięcia metod nie pamiętały, z których instancji obiektów zostały wyodrębnione, co prowadziło do nieoczekiwanych zachowań po wywołaniu zamknięcia metody.

ECMAScript for XML (E4X)

W języki ActionScript 3.0 zaimplementowano specyfikację ECMAScript for XML (E4X), niedawno ujętą w standardzie ECMA-357. Specyfikacja E4X zawiera zestaw wygodnych, naturalnie skonstruowanych elementów języka służących do manipulowania kodem XML. Inaczej niż w tradycyjnych interfejsach API służących do analizy składniowej kody XML, kod XML wraz z elementami specyfikacji E4X może być traktowany jak rodzimy typ danych języka. Specyfikacja EX4 usprawnia tworzenie aplikacji, które manipulują kodem XML, ponieważ radykalnie skraca kod wymagany do realizacji takich manipulacji.

Ze specyfikacją ECMA E4X można zapoznać się pod adresem www.ecma-international.org .

Wyrażenia regularne

Język ActionScript 3.0 oferuje rodzimą obsługę wyrażeń regularnych, ułatwiając szybkie przeszukiwanie ciągów znaków i manipulowanie nimi. Implementacja wyrażeń regularnych w języku ActionScript 3.0 jest zgodna ze specyfikacją języka ECMAScript (ECMA-262) edition 3.

Przestrzenie nazw

Przestrzenie nazw działają podobnie jak tradycyjne specyfikatory dostępu używane do sterowania widocznością deklaracji ( public , private , protected ). Pełnią rolę niestandardowych specyfikatorów dostępu i mogą mieć nazwy wybrane przez programistę. Przestrzenie nazw mają przypisane uniwersalne identyfikatory URI, które zapobiegają kolizjom, a ponadto służą do reprezentacji przestrzeni nazw XML w przypadku korzystania ze specyfikacji E4X.

Nowe typy pierwotne

Język ActionScript 3.0 zawiera trzy typy liczbowe: Number, int i uint. Number reprezentuje liczby zmiennoprzecinkowe o podwójnej precyzji. Typ int reprezentuje 32-bitowe liczby całkowite ze znakiem i pozwala na szybkie realizowanie obliczeń na takich liczbach na poziomie procesora. Typ int jest przydatny do realizacji liczników pętli i zmiennych, które przechowują tylko wartości całkowite. Typ uint reprezentuje 32-bitowe liczby całkowite bez znaku i jest przydatny w przypadku wartości kolorów RGB, liczników bajtów itp. W języku ActionScript 2.0 dostępny jest jeden typ liczbowy o nazwie Number.

Charakterystyka interfejsu API programu

Interfejs API programu dla języka ActionScript 3.0 zawiera wiele klas umożliwiających sterowanie obiektami na niskim poziomie. Architektura języka jest bardziej intuicyjna niż w poprzednich wersjach. Opisanie wszystkich klas zajmie zbyt dużo miejsca, ale o niektórych klasach warto wspomnieć.

Model zdarzeń DOM3

Model zdarzeń DOM3 (Document Object Model Level 3) udostępnia standardowy sposób generowania i obsługi komunikatów o zdarzeniach. Ten model zdarzeń umożliwia obiektom w aplikacjach interakcję oraz komunikowanie, utrzymanie stanu oraz reagowanie na zmiany. Wzorcem dla modelu zdarzeń w języku ActionScript 3.0 była specyfikacja World Wide Web Consortium DOM Level 3 Events Specification. Ten model udostępnia bardziej precyzyjne i wydajniejsze mechanizmy niż mechanizmy dostępne w systemach zdarzeń z poprzednich wersji języka ActionScript.

Klasy zdarzeń i błędów są umieszczone w pakiecie flash.events. Składniki programu Flash Professional oraz środowisko Flex wykorzystują ten sam model zdarzeń, dlatego system zdarzeń jest jednolity w całej platformie Flash.

Interfejs API listy wyświetlania

Interfejs API zapewniający dostęp do listy wyświetlania — czyli drzewa zawierającego wszystkie elementy wizualne aplikacji — zawiera klasy służące do pracy z wizualnymi obiektami pierwotnymi.

Klasa Sprite jest uproszczonym blokiem, który stanowi klasę bazową dla elementów graficznych, takich jak składniki interfejsu użytkownika. Klasa Shape reprezentuje surowe kształty wektorowe. Instancje tych klas można tworzyć w sposób naturalny za pomocą operatora new i w dowolnym momencie dynamicznie zmieniać ich lokalizację w hierarchii dziedziczenia.

Zarządzanie w ramach hierarchii odbywa się automatycznie. Dostępne są metody przeznaczone do określania i zarządzania kolejnością umieszczania obiektów na stosie.

Obsługa danych i treści dynamicznych

Język ActionScript 3.0 zawiera intuicyjne i spójne w całym interfejsie API mechanizmy służące do ładowania i obsługi zasobów oraz danych w aplikacji. Klasa Loader udostępnia jednolity mechanizm ładowania plików SWF i obrazów oraz zapewnia dostęp do szczegółowych informacji o załadowanej treści. Klasa URLLoaderudostępnia odrębny mechanizm ładowania tekstu i danych binarnych w aplikacjach zorientowanych na manipulowanie danymi. Klasa Socket oferuje mechanizmy odczytywania i zapisywania danych binarnych w gniazdach serwera, w dowolnym formacie.

Niskopoziomowy dostęp do danych

Niskopoziomowy dostęp do danych jest zapewniony dzięki różnym interfejsom API. Klasa URLStream udostępnia pobierane dane w postaci surowego strumienia binarnego — w trakcie pobierania. Klasa ByteArray umożliwia optymalizowanie odczytywania i zapisywania danych binarnych oraz pracy z takimi danymi. Interfejs API do obsługi dźwięku zapewnia precyzyjną kontrolę nad dźwiękiem za pośrednictwem klas SoundChannel i SoundMixer. Nowe elementy interfejsu API związane z bezpieczeństwem udostępniają informacje o uprawnieniach dostępu pliku SWF lub załadowanej treści, umożliwiając obsługę błędów zabezpieczeń.

Praca z tekstem

Język ActionScript 3.0 zawiera pakiet flash.text grupujący wszystkie elementy interfejsu API związane z tekstem. Klasa TextLineMetrics udostępnia szczegółowe metryki wiersza tekstu w polu tekstowym; zastępuje metodę TextFormat.getTextExtent() znaną z języka ActionScript 2.0. Klasa TextField zawiera szereg interesujących metod niskopoziomowych, które udostępniają określone informacje o wierszach tekstu lub pojedynczych znakach w polu tekstowym. Na przykład: metoda getCharBoundaries() zwraca prostokąt reprezentujący obwiednię znaku. Metoda getCharIndexAtPoint() zwraca indeks znaku w określonym położeniu. Metoda getFirstCharInParagraph() zwraca indeks pierwszego znaku w akapicie Do metod operujących na poziomie wiersza należy metoda getLineLength() , która zwraca liczbę znaków w określonym wierszu tekstu, oraz metoda getLineText() , która zwraca tekst z określonego wiersza. Klasa Font umożliwia zarządzanie osadzonymi czcionkami w plikach SWF.

Jeszcze niższy poziom kontroli nad tekstem zapewniają klasy z pakietu flash.text.engine, które tworzą mechanizm Flash Text Engine. Ten zbiór klas zapewnia niski poziom kontroli nad tekstem i jest przeznaczony do tworzenia struktur i składników tekstowych.