Объектно-ориентированный язык программирования, созданный для мультимедийной платформы Flash.
ActionScript — объектно-ориентированный язык программирования, изначально разработанный Macromedia Inc. (позже приобретённый Adobe ). На него повлиял HyperTalk , язык сценариев для HyperCard . [3] Сейчас он является реализацией ECMAScript (то есть представляет собой надмножество синтаксиса и семантики языка, более известного как JavaScript ), хотя изначально он возник как родственный язык, оба находясь под влиянием HyperTalk . Код ActionScript обычно преобразуется в формат байт-кода компилятором .
ActionScript в основном используется для разработки веб-сайтов и программного обеспечения, ориентированного на платформу Adobe Flash , первоначально находя применение на веб-страницах в виде встроенных SWF- файлов.
ActionScript 3 также используется с системой Adobe AIR для разработки настольных и мобильных приложений. Сам язык является языком с открытым исходным кодом, поскольку его спецификация предлагается бесплатно [4] , и доступны как компилятор с открытым исходным кодом (как часть Apache Flex ), так и виртуальная машина с открытым исходным кодом ( Tamarin ).
ActionScript также использовался с Scaleform GFx для разработки трехмерных пользовательских интерфейсов видеоигр и индикаторов на лобовом стекле .
Обзор
ActionScript изначально был разработан для управления простой двухмерной векторной анимацией, созданной в Adobe Flash (ранее Macromedia Flash). Первоначально ориентированные на анимацию, ранние версии Flash-контента предлагали мало интерактивных функций, поэтому имели очень ограниченные возможности скриптования. В более поздних версиях была добавлена функциональность, позволяющая создавать веб-игры и насыщенные веб-приложения с потоковой передачей мультимедиа (например, видео и аудио). Сегодня ActionScript подходит для разработки настольных и мобильных устройств через Adobe AIR; он используется в некоторых приложениях баз данных и в базовой робототехнике, как в Make Controller Kit .
Flash MX 2004 представил ActionScript 2.0, язык сценариев, более подходящий для разработки Flash-приложений. Экономия времени часто возможна за счет написания сценариев, а не анимации, что обычно также обеспечивает более высокий уровень гибкости при редактировании.
С момента появления Flash Player 9 alpha (в 2006 году) была выпущена более новая версия ActionScript, ActionScript 3.0. Эта версия языка предназначена для компиляции и запуска на версии виртуальной машины Tamarin , ранее ActionScript Virtual Machine 2, которая также была полностью переписана (получила название AVM2). [5] Из-за этого код, написанный на ActionScript 3.0, как правило, предназначен для Flash Player 9 и выше и не будет работать в предыдущих версиях. В то же время ActionScript 3.0 выполняется до 10 раз быстрее, чем устаревший код ActionScript, благодаря улучшениям компилятора just-in-time . [6]
Библиотеки Flash могут использоваться с возможностями XML браузера для отображения насыщенного контента в браузере. Эта технология известна как асинхронный Flash и XML, во многом похожая на AJAX. Adobe предлагает свою линейку продуктов Flex для удовлетворения спроса на насыщенные веб-приложения, созданные на основе среды выполнения Flash, с поведением и программированием, выполненными в ActionScript. ActionScript 3.0 формирует основу интерфейса программирования приложений Flex 2 ( API ).
История
ActionScript начинался как объектно-ориентированный язык программирования для инструмента разработки Flash от Macromedia , позже разработанного Adobe Systems как Adobe Flash. Первые три версии инструмента разработки Flash предоставляли ограниченные возможности интерактивности. Ранние разработчики Flash могли прикрепить простую команду, называемую «действием», к кнопке или фрейму. Набор действий включал в себя базовые элементы управления навигацией с такими командами, как «воспроизведение», «остановка», «получить URL» и «перейти и играть».
С выпуском Flash 4 в 1999 году этот простой набор действий стал небольшим языком сценариев. Новые возможности, представленные для Flash 4, включали переменные , выражения , операторы , операторы if и циклы . Хотя внутри компании они именовались «ActionScript», в руководстве пользователя Flash 4 и маркетинговых документах продолжали использовать термин «действия» для описания этого набора команд.
Хронология по версии плеера
- Flash Player 2 : первая версия с поддержкой скриптов, ее действия включали gotoAndPlay, gotoAndStop, nextFrame и nextScene для управления временной шкалой.
- Flash Player 3 : расширенная поддержка базовых скриптов, возможность загрузки внешних SWF-файлов (loadMovie).
- Flash Player 4 : первый проигрыватель с полной реализацией скриптов (называемых Actions ), скрипты имели синтаксис на основе Flash и содержали поддержку циклов, условных операторов, переменных и других базовых языковых конструкций.
- Flash Player 5 : Включенный в первую версию ActionScript, он использовал прототипное программирование на основе ECMAScript, [7] и допускал полное процедурное программирование и объектно-ориентированное программирование. Разработка на основе проектирования.
- Flash Player 6 добавил модель обработки событий, элементы управления доступом и поддержку switch . Первая версия с поддержкой Action Message Format (AMF) и Real-Time Messaging Protocol (RTMP) позволяла осуществлять потоковую передачу аудио/видео по запросу.
- Flash Player 7 : Дополнения к нему включают каскадные таблицы стилей ( CSS ) для текста и поддержку ActionScript 2.0, языка программирования, основанного на ECMAScript 4 Netscape Proposal [8] с наследованием на основе классов . Однако ActionScript 2.0 может кросс-компилироваться в байт-код ActionScript 1.0 , так что он может работать в Flash Player 6.
- Flash Player 8 дополнительно расширил ActionScript 1/ActionScript 2, добавив новые библиотеки классов с API для управления данными растровых изображений во время выполнения, загрузки файлов и динамических фильтров для размытия и тени .
- Flash Player 9 (первоначально называвшийся 8.5) добавил ActionScript 3.0 с появлением новой виртуальной машины, называемой ActionScript Virtual Machine 2 (AVM2), которая сосуществует с предыдущей AVM1, необходимой для поддержки устаревшего контента. Повышение производительности было главной целью для этого выпуска проигрывателя, включая новый компилятор just-in-time (JIT). Была добавлена поддержка двоичных сокетов, ECMAScript для XML (E4X) XML parsing, полноэкранного режима и регулярных выражений. Это первый выпуск проигрывателя, который будет называться Adobe Flash Player. [9]
- Flash Player 10 (первоначально назывался Astro) : добавлены базовые 3D- манипуляции, такие как вращение по осям X, Y и Z, API для 3D-рисования и наложение текстур . Возможность создания пользовательских фильтров с помощью Adobe Pixel Bender . Несколько задач визуальной обработки теперь выгружаются на графический процессор , что дает заметное сокращение времени рендеринга для каждого кадра, что приводит к более высокой частоте кадров , особенно с видео H.264 . Существует новый звуковой API, который позволяет создавать пользовательские аудио во Flash, что никогда не было возможно ранее. [10] Кроме того, Flash Player 10 поддерживает одноранговую ( P2P ) связь с протоколом Real Time Media Flow Protocol (RTMFP).
- Flash Player 11 : Главное дополнение в этой версии — расширенные (ускоренные графической картой) 3D-возможности на основе Stage3D для Windows Desktop, Mac Desktop, iOS , Android и других основных платформ. Значительные улучшения совместимости были добавлены для платформы iOS и других ненастольных платформ. Другие функции включают кодирование H.264 для камер, собственную поддержку JSON , кубические кривые Безье , безопасный генератор случайных чисел , сжатие LZMA для SWF-файлов, рабочие процессы для разгрузки части выполнения кода на другие потоки процессора, ускоренный графической картой рендеринг потока камеры, встроенные функции памяти и анализ производительности, а также компилятор ActionScript 2.0, а также некоторые другие незначительные дополнения. [11]
- Flash Player 11.2 : выпущен в марте 2012 года, ориентирован на добавление функций, которые являются ключевыми для игрового и видеорынка. Некоторые из функций в выпуске включают следующее: Поддержка блокировки мыши. Поддержка щелчка правой и средней кнопкой мыши. Отключение контекстного меню. Поддержка аппаратно-ускоренной графики/Stage 3D для Apple iOS и Android через Adobe AIR. Поддержка большего количества видеокарт с аппаратным ускорением (с января 2008 года) для расширения доступности аппаратно-ускоренного контента. Новый API событий Throttle (отправляет событие, когда Flash Player тормозит, приостанавливает или возобновляет контент). Многопоточный конвейер декодирования видео на ПК, который улучшает общую производительность видео на всех настольных платформах. Уведомление об использовании премиум-функций в отладочных проигрывателях; контент воспроизводится без ограничений в проигрывателях выпуска.
- Flash Player 11.3 : выпущен в июне 2012 года, ориентирован на включение функций и возможностей, ключевых для игрового рынка, а также на решение популярных запросов от разработчиков. Некоторые из функций в этом выпуске включают следующее: Поддержка ввода с клавиатуры в полноэкранном режиме. Улучшенная поддержка звука для работы со звуком с малой задержкой. Возможность прогрессивной потоковой передачи текстур для содержимого Stage 3D. Защищенный режим для Flash Player в Firefox . События меток кадров. Поддержка сжатия BitmapData в форматы JPEG и PNG . Поддержка требований изолированной среды приложений Mac OS X App Store . Поддержка потоковой передачи текста для Stage 3D. Расширенная информация о деталях драйвера GPU . Рисование растровых изображений с качественным API (новое). Выпуск внешнего API событий мыши. Поддержка тихого обновления Flash Player для Mac OS. Поддержка стилуса для устройств Android 4.0 (Adobe AIR). Отладка по USB для iOS (Adobe AIR). Поддержка симулятора iOS (Adobe AIR).
- Flash Player 11.4 : выпущенный в августе 2012 года, он был сосредоточен на включении функций и возможностей, которые являются ключевыми для игрового рынка, а также на решении популярных запросов от разработчиков. Некоторые из функций в этом выпуске включают ActionScript workers (обеспечивает параллельное выполнение ActionScript в отдельных потоках), поддержку расширенного профилирования, поддержку сжатия LZMA для ByteArray, поддержку аппаратно-ускоренных видеокарт для Stage 3D, расширенную до 2006, улучшенную производительность ActionScript при использовании Apple iOS, API индекса производительности для информирования о возможностях производительности текущей среды, поддержку сжатых текстур с поддержкой альфа-канала, поддержку API StageVideo.attachCamera и поддержку push-уведомлений для iOS (Adobe AIR).
- Flash Player 11.5 : выпущен в ноябре 2012 года, он был сосредоточен на улучшении производительности и стабильности. Некоторые из функций в этом выпуске включают общую поддержку ByteArray для рабочих ActionScript, трассировку стека отладки в сборках релиза Flash Player и различные исправления ошибок.
- Flash Player 11.6 : выпущен в марте 2013 года, он фокусируется на улучшении производительности, безопасности и стабильности. Некоторые из функций в этом выпуске включают возможность запрашивать графические векторные данные во время выполнения, улучшения пользовательского интерфейса полноэкранного диалога разрешений, возможность загрузки SWF во время выполнения при развертывании в качестве приложения AIR в режиме AOT на iOS, более детальный контроль поддерживаемого разрешения экрана на устройствах iOS при развертывании в качестве приложения AIR, поддержка HiDPI для Flash Professional и доступ ActionScript 3 к быстрым операциям памяти/внутренним функциям.
- Flash Player 11.7 : выпущенный в июне 2013 года под кодовым названием «Geary», этот релиз фокусируется на премиум-видео, играх, безопасности и стабильности. Некоторые из функций, запланированных для этого релиза, включают отладку Android captive runtime, поддержку контроллера OUYA , удаленный хостинг SWF-файлов на iOS и предотвращение резервного копирования общих объектов на iOS для лучшей поддержки iCloud.
- Flash Player 11.8 : Adobe планировала выпустить эту версию в начале второй половины 2013 года под кодовым названием "Harrison". Этот релиз был сосредоточен на премиум-видео, играх, безопасности и стабильности. Некоторые из функций в этом релизе включали бы рекурсивный API остановки в MovieClips и поддержку GamePad в браузерах настольных компьютеров и Android.
Временная шкала по версии ActionScript
2000–2004: ActionScript «1.0».
С выпуском Flash 5 в сентябре 2000 года «действия» из Flash 4 были снова улучшены и впервые названы «ActionScript». [12] Это была первая версия ActionScript с влиянием JavaScript и стандарта ECMA-262 (третье издание), поддерживающая объектную модель указанного стандарта и многие из его основных типов данных . Локальные переменные могут быть объявлены с помощью оператора var , а также могут быть созданы пользовательские функции с передачей параметров и возвращаемыми значениями. Примечательно, что ActionScript теперь также можно было набирать с помощью текстового редактора, а не собирать, выбирая действия из раскрывающихся списков и элементов управления диалоговых окон. Со следующим выпуском его инструмента разработки Flash MX и соответствующего ему проигрывателя Flash Player 6 язык остался по сути неизменным; были только незначительные изменения, такие как добавление оператора switch и оператора «строгого равенства» ( === ), что приблизило его к соответствию ECMA-262 . Две важные особенности ActionScript, которые отличают его от более поздних версий, — это его свободная система типов и его опора на наследование на основе прототипов . Свободная типизация относится к способности переменной хранить любой тип данных. Это позволяет быстро разрабатывать скрипты и особенно хорошо подходит для небольших проектов по написанию скриптов. Наследование на основе прототипов — это механизм ActionScript 1.0 для повторного использования кода и объектно-ориентированного программирования. Вместо ключевого слова class , которое определяет общие характеристики класса , ActionScript 1.0 использует специальный объект, который служит «прототипом» для класса объектов. Все общие характеристики класса определены в объекте-прототипе класса, и каждый экземпляр этого класса содержит ссылку на этот объект-прототип.
2003–2006: ActionScript 2.0
Следующая крупная версия языка, ActionScript 2.0, была представлена в сентябре 2003 года с выпуском Flash MX 2004 и соответствующего проигрывателя Flash Player 7. В ответ на потребность пользователей в языке, лучше приспособленном для более крупных и сложных приложений, ActionScript 2.0 включал проверку типов во время компиляции и синтаксис на основе классов , такой как ключевые слова class и extends . Хотя это позволяло использовать более структурированный подход к объектно-ориентированному программированию, код все равно компилировался в байт-код ActionScript 1.0 , что позволяло использовать его и в предыдущем Flash Player 6. Другими словами, синтаксис наследования на основе классов был слоем поверх существующей системы на основе прототипов. С помощью ActionScript 2.0 разработчики могли ограничивать переменные определенным типом, добавляя аннотацию типа, чтобы ошибки несоответствия типов можно было обнаружить во время компиляции . ActionScript 2.0 также представил синтаксис наследования на основе классов, чтобы разработчики могли создавать классы и интерфейсы, как они это делали бы в языках на основе классов, таких как Java и C++ . Эта версия частично соответствовала проекту спецификации ECMAScript четвертого издания.
2006–2020: ActionScript 3.0
В июне 2006 года ActionScript 3.0 дебютировал с Adobe Flex 2.0 и соответствующим ему проигрывателем Flash Player 9. ActionScript 3.0 был фундаментальной реструктуризацией языка, настолько, что он использовал совершенно другую виртуальную машину . Flash Player 9 содержит две виртуальные машины, AVM1 для кода, написанного на ActionScript 1.0 и 2.0, и AVM2 для контента, написанного на ActionScript 3.0. ActionScript 3.0 добавил ограниченную поддержку аппаратного ускорения ( DirectX , OpenGL ).
Обновление языка добавило несколько новых функций:
Флэш Лайт
- Flash Lite 1.0 : Flash Lite — это технология Flash, специально разработанная для мобильных телефонов и потребительских электронных устройств. Поддерживает Flash 4 ActionScript.
- Flash Lite 1.1 : добавлена поддержка Flash 4 ActionScript и дополнительных API устройств.
- Flash Lite 2.0 и 2.1 : добавлена поддержка Flash 7 ActionScript 2.0 и некоторых дополнительных API fscommand2.
- Flash Lite 3 : добавлена поддержка Flash 8 ActionScript 2.0, а также воспроизведения видео FLV .
- Flash Lite 4 : добавлена поддержка Flash 10 ActionScript 3.0 в качестве плагина для браузера, а также аппаратного ускорения графики.
ВОЗДУХ
Adobe AIR поддерживает ActionScript, в дополнение к некоторому расширенному контенту, такому как движок Stage3D, разработанный Adobe. Количество API (интерфейсов прикладного программирования), доступных для ActionScript 3.0, также значительно возросло.
Синтаксис
Код ActionScript имеет свободную форму и может быть создан с любым количеством или стилем пробелов, которые пожелает автор. Основной синтаксис получен из ECMAScript .
ActionScript 2.0
Следующий код, который работает в любом совместимом проигрывателе, создает текстовое поле на глубине 0, в позиции (0, 0) на экране (измеряется в пикселях ), шириной и высотой 100 пикселей. Затем text
параметру присваивается строка " Hello, world " , и оно автоматически отображается в проигрывателе:
createTextField ( "приветствие" , 0 , 0 , 0 , 100 , 100 ) ; приветствие.текст = " Привет, мир" ;
При написании внешних файлов классов ActionScript 2.0 приведенный выше пример можно записать в файл с именем Greeter.as следующим образом.
class com.example.Greeter extends MovieClip { public function Greeter ( ) { var txtHello : TextField = this.createTextField ( " txtHello " , 0 , 0 , 0 , 100 , 100 ) ; txtHello.text = " Привет , мир " ; } }
ActionScript 3.0
ActionScript 3.0 имеет синтаксис, похожий на ActionScript 2.0, но другой набор API для создания объектов. Сравните скрипт ниже с предыдущей версией ActionScript 2.0:
var txtHello : TextField = new TextField (); txtHello . text = "Привет, мир" ; this . addChild ( txtHello );
Минимальные программы ActionScript 3.0 могут быть несколько больше и сложнее из-за возросшего разделения языка программирования и интегрированной среды разработки Flash (IDE).
Предположим, что следующий файл — Greeter.as :
пакет com.example { import flash.text.TextField ; import flash.display.Sprite ; public class Greeter extends Sprite { public function Greeter () { var txtHello : TextField = new TextField (); txtHello . text = "Hello World" ; addParent ( txtHello ); } } }
ActionScript 3 также можно использовать в файлах MXML при использовании фреймворка Apache Flex :
<?xml версия="1.0" кодировка="utf-8"?> <s:Приложение xmlns:fx= "http://ns.adobe.com/mxml/2009" xmlns:s= "library://ns.adobe.com/flex/mx/polysylabi" xmlns:mx= "library://ns.adobe.com/flex/mx" layout= "vertical" creationComplete= "initApp()" > <fx:Script> <![CDATA[ public function initApp (): void { // Выводит наше сообщение "Hello, world!" в заголовок title . text = " Hello, World!" ; } ]]> </fx:Script> <s:Label id= "title" fontSize= "54" fontStyle= "bold" /> </s:Application>
Структуры данных
Типы данных
ActionScript в основном состоит из "фундаментальных" или "простых" типов данных, которые используются для создания других типов данных. Эти типы данных очень похожи на типы данных Java . Поскольку ActionScript 3 был полностью переписанным ActionScript 2, типы данных и их наследование изменились.
Типы данных верхнего уровня ActionScript 2
- Строка : список символов, например «Hello World»
- Число : Любое числовое значение
- Булевое значение : простое двоичное хранилище, которое может принимать только значения «истина» или «ложь».
- Object : Object — это тип данных, от которого наследуются все сложные типы данных. Он позволяет группировать методы, функции, параметры и другие объекты.
ActionScript 2 сложные типы данных
Существуют дополнительные "сложные" типы данных. Они более ресурсоемки для процессора и памяти и состоят из множества "простых" типов данных. Для AS2 некоторые из этих типов данных:
- MovieClip : создание ActionScript, позволяющее легко использовать видимые объекты.
- TextField : Простое динамическое или вводимое текстовое поле. Наследует тип MovieClip.
- Кнопка : Простая кнопка с 4 кадрами (состояниями): Вверх, Наверх, Вниз и Удар. Наследует тип MovieClip.
- Дата : обеспечивает доступ к информации о конкретном моменте времени.
- Массив : обеспечивает линейное хранение данных.
- XML : XML-объект
- XMLNode : XML-узел
- LoadVars : объект Load Variables позволяет хранить и отправлять переменные HTTP POST и HTTP GET.
- Звук
- NetStream
- NetConnection
- MovieClipLoader
- EventListener
Примитивные (простые) типы данных ActionScript 3 [13]
- Boolean : тип данных Boolean имеет только два возможных значения: true и false или 1 и 0. Никакие другие значения недопустимы.
- int : Тип данных int представляет собой 32-битное целое число от -2 147 483 648 до 2 147 483 647.
- Null : Тип данных Null содержит только одно значение, null. Это значение по умолчанию для типа данных String и всех классов, определяющих сложные типы данных, включая класс Object.
- Число : Тип данных Number может представлять целые числа, целые числа без знака и числа с плавающей точкой . Тип данных Number использует 64-битный формат двойной точности, как указано в стандарте IEEE для двоичной арифметики с плавающей точкой ( IEEE-754 ). Тип Number может хранить целые числа от -9 007 199 254 740 992 (-2 53 ) до 9 007 199 254 740 992 (2 53 ), а также значения с плавающей точкой от Number.MAX_VALUE (1.79769313486231e+308) до Number.MIN_VALUE (4.940656458412467e-324).
- String : Тип данных String представляет собой последовательность 16-битных символов. Строки хранятся внутри как символы Unicode, используя формат UTF-16 . Предыдущие версии Flash использовали формат UTF-8.
- uint : Тип данных uint (целое число без знака) представляет собой 32-битное целое число без знака от 0 до 4 294 967 295.
- void : Тип данных void содержит только одно значение, undefined. В предыдущих версиях ActionScript undefined было значением по умолчанию для экземпляров класса Object. В ActionScript 3.0 значением по умолчанию для экземпляров Object является null.
ActionScript 3 некоторые сложные типы данных [13]
- Array : Содержит список данных. Хотя ActionScript 3 является строго типизированным языком, содержимое Array может быть любого типа, а значения должны быть приведены к исходному типу после извлечения (поддержка типизированных Arrays недавно была добавлена с классом Vector).
- Дата : объект даты, содержащий цифровое представление даты/времени.
- Ошибка : универсальный объект ошибки, позволяющий сообщать об ошибках во время выполнения, если он выдается как исключение.
- flash.display:Bitmap : Неанимированный растровый объект отображения.
- flash.display:MovieClip : Анимированный объект отображения видеоклипа; временная шкала Flash по умолчанию представляет собой MovieClip.
- flash.display:Shape : Неанимированный векторный объект фигуры.
- flash.display:SimpleButton : простой интерактивный тип кнопки, поддерживающий состояния «вверх», «наведение» и «вниз» с произвольной областью нажатия.
- flash.display:Sprite : Контейнер отображаемых объектов без временной шкалы.
- flash.media:Video : Объект воспроизведения видео, поддерживающий прямую (прогрессивную загрузку) или потоковую (RTMP) передачу. Начиная с версии Flash Player 9.0.115.0, формат видео высокой четкости H.264/MP4 также поддерживается наряду со стандартным содержимым Flash video (FLV).
- flash.text:TextField : динамический, опционально интерактивный объект текстового поля.
- flash.utils:ByteArray : Содержит массив двоичных байтовых данных.
- flash.utils:Dictionary : Словари — это разновидность Object, которая может содержать ключи любого типа данных (тогда как Object всегда использует строки в качестве своих ключей).
- Функция : Основной класс для всех определений методов Flash.
- Object : Тип данных Object определяется классом Object. Класс Object служит базовым классом для всех определений классов в ActionScript. Объекты в их базовой форме могут использоваться как ассоциативные массивы , содержащие пары ключ-значение, где ключи являются строками, а значения могут быть любого типа.
- RegExp : объект регулярного выражения для строк.
- Вектор : вариант массива, поддерживаемый при публикации для Flash Player 10 или выше. Векторы — это типизированные, плотные массивы (значения должны быть определены или равны нулю), которые могут иметь фиксированную длину и проверяются на выход за пределы во время извлечения. Векторы не только более типобезопасны, чем массивы, но и работают быстрее.
- XML : переработанный объект XML, основанный на E4X (стандарт ECMA-357); доступ к узлам и атрибутам осуществляется иначе, чем к объекту ActionScript 2.0 (для обратной совместимости предусмотрен устаревший класс с именем XMLDocument).
- XMLList : объект на основе массива для поиска различного контента в классе XML.
Использование типов данных
Основной синтаксис:
var variableName : VariableType = new VariableType ( param1 , param2 , ... , paramN );
Итак, чтобы создать пустой объект:
var myObject : Object = new Object ();
Или, неформально:
Некоторые типы устанавливаются автоматически:
var myString : String = "Hello Wikipedia!" ; // Это автоматически установит переменную как строку. var myNumber : Number = 5 ; // Это сделает то же самое для числа. var myObject : Object = { param1 : "Hi!" , param2 : 76 }; // Это создает объект с двумя переменными. // param1 — это строка с данными "Hi!", // а param2 — это число с данными 76. // Это синтаксис для автоматического создания массива. var myArray : Array = [ 5 , "Hello!" , { a : 5 , b : 7 }]; // Он создает массив с 3 переменными. // Первая (0) — это число со значением 5, // вторая (1) — это строка со значением "Hello!", // а третья (2) — это объект со значением { a: 5, b: 7 }.
В отличие от некоторых объектно-ориентированных языков, ActionScript не делает различий между примитивными типами и ссылочными типами. В ActionScript все переменные являются ссылочными типами. Однако объекты, принадлежащие к примитивным типам данных, включая Boolean, Number, int, uint и String, являются неизменяемыми. [14]
Так что если переменная предположительно примитивного типа, например, целое число, передается в функцию, изменение этой переменной внутри функции не изменит исходную переменную, так как внутри функции создается новый объект int. Если переменная другого (не примитивного) типа данных, например, XML, передается в функцию, изменение этой переменной внутри функции также изменит исходную переменную, так как новый объект XML не создается.
Некоторым типам данных можно присваивать значения с помощью литералов :
var item1 : String = "ABC" ; var item2 : Boolean = true ; var item3 : Number = 12 ; var item4 : Array = [ "a" , "b" , "c" ]; var item5 : Object = { name : "Actionscript" , version : "3.0" }; var item6 : XML = < node >< child /></ node >; // Обратите внимание, что примитивный XML не заключен в кавычки
Ссылка в ActionScript — это указатель на экземпляр класса. Ссылка хранит адрес памяти объекта — операции со ссылками будут следовать значению ссылки на адрес памяти объекта и выполнять операцию над этим объектом. Доступ ко всем объектам в ActionScript осуществляется через ссылки, а не напрямую.
var item1 : XML = new XML ( "<node><child /></node>" ); var item2 : XML = item1 ; item2 . firstChild . attributes . value = 13 ; // item1 теперь равен item2, поскольку item2 просто указывает на то, на что указывает item1. // Теперь оба: // <node><child value="13" /></node>
Только ссылки на объект могут быть удалены с помощью ключевого слова "delete". Удаление реальных объектов и данных выполняется сборщиком мусора Flash Player, который проверяет наличие любых существующих ссылок в пространстве флэш-памяти. Если ничего не найдено (никаких других ссылок на потерянный объект не сделано), он удаляется из памяти. По этой причине управление памятью в ActionScript требует тщательного планирования разработки приложения.
var item1 : XML = new XML ( "<node><child /></node>" ); delete item1 ; // Если нигде больше в приложении нет ссылок на item1, // он будет удален при следующем проходе сборщика мусора
Защита кода
Как и большинство форматов файлов байт-кода , файлы Flash SWF могут быть декомпилированы в исходный код и ресурсы (аналогично тому, как можно декомпилировать файлы Microsoft .NET ). Некоторые декомпиляторы способны практически полностью реконструировать исходный файл, вплоть до фактического кода, который использовался во время создания (хотя результаты различаются в зависимости от конкретного случая). [15] [16] [17]
В противовес декомпиляторам были введены обфускаторы ActionScript , которые преобразуют код в форму, которая нарушает вывод декомпилятора, сохраняя при этом функциональность и структуру программы. Более качественные обфускаторы реализуют лексические преобразования, такие как переименование идентификаторов, преобразование потока управления и преобразование абстракции данных, которые в совокупности затрудняют декомпиляторам генерацию вывода, который, вероятно, будет полезен человеку. Менее надежные обфускаторы вставляют ловушки для декомпиляторов. Такие обфускаторы либо вызывают неожиданный сбой программного обеспечения декомпилятора, либо генерируют непонятный исходный код. [ необходима цитата ]
Ссылки
- ^ Нельсон, Гэри (28 апреля 2020 г.). «Как ActionScript предвосхитил TypeScript». Medium . Получено 9 июля 2022 г. .
- ^ RFC 4329 (ограничение, совместимое с EcmaScript)
- ^ "Потерянное десятилетие Apple, HyperCard и то, чего НЕ могло бы быть, если бы Apple тогда была такой, какой она является сегодня". ZDNet . 17 апреля 2011 г. Архивировано из оригинала 21 апреля 2011 г. Получено 4 декабря 2014 г.
- ^ "Спецификация языка ActionScript 3". Архивировано из оригинала 27 марта 2017 г. Получено 12 ноября 2016 г.
- ^ Бримелоу, Ли (18 августа 2008 г.). "Шесть причин использовать ActionScript 3.0". Adobe Systems Incorporated . Получено 18 июня 2010 г.
- ^ Гроссман, Гэри; Хуан, Эмми (27 июня 2006 г.). "Обзор ActionScript 3.0". Adobe Systems Incorporated . Получено 18 июня 2010 г.
- ^ "Стандарт ECMA-262". Ecma-international.org . Получено 22 апреля 2013 г. .
- ^ Waldemar Horwat, ed. (30 июня 2003 г.). "ECMAScript 4 Netscape Proposal". Netscape . Архивировано из оригинала 11 июля 2007 г. . Получено 11 апреля 2019 г. .
- ^ "Flash Player | Adobe Flash Player 11 | Обзор". Adobe.com. 9 апреля 2013 г. Получено 22 апреля 2013 г.
- ^ "Adobe Labs – Adobe Flash Player 10.1". Labs.adobe.com. Архивировано из оригинала 5 января 2010 г. Получено 17 декабря 2009 г.
- ^ "Заметки о выпуске Flash Player 11 и AIR 3 для Adobe Labs" (PDF) . Архивировано из оригинала (PDF) 14 июля 2011 г.
- ^ "Flash Player 11, AIR 3 Release Notes". helpx.adobe.com . Получено 7 октября 2016 г. .
- ^ ab "Описания типов данных + Документация Flash CS3". Архивировано из оригинала 2 ноября 2007 г. Получено 13 июля 2007 г.
- ^ "Flex 3 – Параметры функции". Livedocs.adobe.com. Архивировано из оригинала 12 февраля 2009 г. Получено 17 декабря 2009 г.
- ^ "Обзор другого декомпилятора третьей стороной". Flashmagazine.com. 21 октября 2007 г. Архивировано из оригинала 20 июня 2017 г. Получено 22 апреля 2013 г.
- ^ "Комментарии клиентов об одном декомпиляторе Flash". Topshareware.com . Получено 22 апреля 2013 г. .
- ↑ Отзывы клиентов о другом продукте Flash Архивировано 18 августа 2006 г. на Wayback Machine
Внешние ссылки
В Wikibooks есть книга по теме: Программирование на ActionScript
В Wikibooks есть книга по теме: Введение в ActionScript 2.0
В Викиверситете есть обучающие ресурсы по ActionScript:Введение
- Официальный сайт , ActionScript Technology Center
- Справочник языка ActionScript 2.0 Архивировано 31 января 2013 г. на Wayback Machine
- Справочник по языку и компонентам ActionScript 3.0
- Элементы языка
- Резюме пакета
- Приложения
- Flex 3 LiveDocs: Программирование ActionScript 3.0
- Adobe – Центр разработчиков Flash
- Adobe Flex SDK
- Уоррен, Том (25 июля 2017 г.). «Adobe окончательно убьет Flash в 2020 году». The Verge . Архивировано из оригинала 25 июля 2017 г. . Получено 16 декабря 2020 г. .