User's collector

Внимание!   Данная опция будет доступна только после того, как вы авторизуетесь.
   запомнить меня 

Спасибо Илье «_Smirnoff» Смирнову за хорошую новость! В продаже появилась новая книга на русском языке про разработку приложений под платформу Adobe AIR при помощи JavaScript и HTML: «Adobe AIR. Разработка приложений с помощью Ajax».

Думаю, что она станет неплохим дополнением к книге «Adobe AIR. Практическое руководство по среде для настольных приложений Flash и Flex» для разработчиков, желающих воспользоваться предоставляемой Adobe AIR возможностью создавать приложения на языке JavaScript.

Вот аннотация к этой книге на сайте Books.ru:

«Книга посвящена разработке Web-приложений в кросс-платформенной рабочей среде Adobe Integrated Runtime (AIR) для Microsoft Windows XP (SP2)/Windows Vista и Mac OS X 10.4/10.5 с использованием технологии Ajax (HTML и JavaScript). Рассматривается создание, запуск, отладка и развертывание AIR-приложений, взаимодействие приложений с сетевыми ресурсами, применение средств разработки AIR, создание окон и меню, импорт и экспорт данных, работа с файлами, папками и базами данных, использование медиакомпонентов.

Сопровождающий книгу Web-сайт www.DMCInsights.com/air содержит примеры скриптов, весь программный код, приведенный в книге, новые версии программного обеспечения и множество другой полезной информации».

Не поленюсь и еще раз процитирую пару своих абзацев вот из этой заметки:

Что ж, друзья, меня, несомненно, радует, что книг на русском языке о технологиях, которыми мы тут с вами занимаемся, становится все больше и больше. Радует, что постепенно сокращаются промежутки между выходом оригинальных англоязычных изданий и появлением их русских переводов.

Осталось еще дождаться выходящей в январе книги «Learning Flex 3. Getting up to Speed with Rich Internet Applications». Да и не помешало бы заиметь чуть больше свободного времени, чтобы успеть быстрее все это прочитать. :)

Комментариев нет

Теги:

Друзья, а вы в курсе, что на сайте документации к продуктам Adobe теперь доступны файлы справки к Flash CS4 на русском языке? Переведен даже справочник по классам языка и компонентов. Хороший подарок от Adobe к новому году, не находите? Осталось дождаться перевода документации к Flex 3.

9 комментариев

Теги:

Оказывается, в продаже появились две новые книги по Flex и AIR на русском языке, которые я сегодня благополучно заказал для себя на Books.ru.

Первая книга называется «Adobe AIR. Практическое руководство по среде для настольных приложений Flash и Flex». Оригинальное название на английском звучит как «Adobe AIR in Action». Это небольшая по объему (всего 350 страниц) книга, в которой речь, как я понимаю, идет о версии 1.0 среды AIR. В виду полного отсутствия каких-либо других книг по AIR на русском языке, я считаю, что это издание является «must have» для разработчиков AIR приложений. Тем более что отличия между версиями 1.0 и 1.5 среды AIR не столь значительны, чтобы информация в книге оказалась устаревшей (в основном эти изменения связанны с внедрением совместимости с Flash Player 10).

К слову сказать, книги из серии «… in action» уже давно зарекомендовали себя среди программистов, как лучшие практические издания по конкретным тематикам. Научным редактором перевода, насколько мне известно, является Михаил Антипин. Так что, скорее всего нас ожидает интересное содержание в хорошем качестве перевода.

Вторая книга называется «Программирование c использованием Adobe Flex». Она толще, чем предыдущая – объемом в 570 страниц. В книге описываются приемы работы со второй версией Flex фреймворка. Опять же никаких кардинальных изменений между версиями 2 и 3 Flex не было, так что информация, содержащаяся в книге, все еще актуальна. Неактуальной информация будет для вас только в том случае, если вы сразу решили изучать Flex 4 Gumbo, который в настоящий момент находится в состоянии alpha-версии. Но стоит эта книга немало – более 800 рублей, которые, тем не менее, с лихвой окупятся, если воспользоваться полученными из книги знаниями.

Что ж, друзья, меня, несомненно, радует, что книг на русском языке о технологиях, которыми мы тут с вами занимаемся, становится все больше и больше. Радует, что постепенно сокращаются промежутки между выходом оригинальных англоязычных изданий и появлением их русских переводов.

Осталось еще дождаться выходящей в январе книги «Learning Flex 3. Getting up to Speed with Rich Internet Applications». Да и не помешало бы заиметь чуть больше свободного времени, чтобы успеть быстрее все это прочитать. :)

9 комментариев

Теги:

Возрадуйтесь начинающие флэшеры и флексеры! Вышла в свет новая книга Колина Мука на русском языке «ActionScript 3.0 для Flash. Подробное руководство» (страница книги на Books.ru).

Меня немного смущает перевод названия книги, который в оригинале звучит как «Essential ActionScript 3.0», что буквально означает «Основы ActionScript 3.0». Будем надеяться, что такой не совсем корректный перевод названия книги — это просто маркетологический ход, призванный повысить продажи, и в целом перевод основного содержимого книги будет на высоте, как и как и переводы двух прошлых книг Колина.

Лично я уже заказал эту книгу для своей коллекции. =)

26 комментариев

Теги:

Вы искали статьи Майкла Клишина об использовании плагина FDT, или о внедрении Flash ролика в HTML-страницу при помощи SWFObject, или перевод книги «Getting Started with Flex 2» и не нашли их по их обычному адресу? Что ж, спешу вас обрадовать, статьи теперь можно скачать здесь, на этом сайте. С официального разрешения Майкла. Они не будут удалены, пока не потеряют свою актуальность.

А что вы улыбаетесь? Надо же как-то оправдывать название сайта и тащить сюда что ни попадя. Хотя ни к мегаполезным статьям Майкла, ни к переводу последняя фраза ни в коей степени не относится…

P.S.: Постоянные ссылки на статьи добавлены в раздел «Downloads».

5 комментариев

Теги:

Содержание

  • Синхронные и асинхронные версии методов
  • Чтение содержимого папки
  • Доступ к файловой информации
  • Процедуры копирования и перемещения файлов и папок
  • Создание файлов и папок
  • Удаление файлов и папок
  • Чтение и запись файлов
  • Введение

    Apollo имеет файловый API ввода/вывода, который позволяет приложениям считывать и создавать файлы и папки на компьютере пользователя, и в целом обладает следующим функционалом:

    • позволяет создавать и удалять файлы и папки;
    • позволяет копировать и перемещать файлы и папки;
    • позволяет получать список содержимого папок;
    • получать доступ к системной информации о файлах и папках;
    • позволяет считывать и записывать бинарные файлы;
    • позволяет считывать и записывать текстовые файлы;
    • позволяет сериализацию и десериализацию объектов ActionScript.

    Низкоуровневая функциональность для работы с файловой системой доступна только в коде ActionScript. Flex-фреймворк для Apollo содержит компоненты для работы с файлами и папками, но они являются всего лишь графическими компонентами для навигации по файловой системе и выбора файлов и папок. Эти компоненты не предоставляют прямой доступ к другим основным файловым операциям ввода/вывода.

    В дополнение к информации, содержащейся в этой главе, смотрите примеры из раздела «Работа с файловой системой» в пятой главе книги. В этих примерах иллюстрируются некоторые концепции, описанные здесь, и в них приводятся примеры работающего MXML-кода, который вы можете протестировать, используя Flex Builder или Apollo SDK.

    Модель безопасности

    Apollo, в конечном счете, будет предусматривать комплексную модель безопасности, которая будет контролировать доступ к локальным ресурсам, таким как файловая система. Однако эта модель безопасности не была включена в альфа-версию Apollo.

    Необходимо помнить о том, что Apollo-приложение устанавливается на компьютер пользователя и только после этого запускается. В следствие с этим, некоторые правила, которые используются для загрузки и запуска других приложений из интернета, также применимы для загрузки и запуска Apollo приложений. Пользователь должен загружать и устанавливать приложения только из тех источников, которым доверяет.

    Доступ к файлам и папкам

    Apollo приложения могут работать на различных платформах, например на Windows и Mac OS. Файловый API использует кроссплатформенный синтаксис кода, так что вам не придется писать код, зависящий от конкретной операционной системы.

    Вот, к примеру, различия в путях к пользовательским файлам в системах Mac OS и Windows:

    • типичный путь к файлу на Mac OS: /Users/joe/Documents/test.txt;
    • типичный путь к файлу на Windows: C:Documents and SettingsjoeMy Documentstest.txt.

    Однако в Apollo вы можете воспользоваться компонентами, классами, методами и свойствами, для простого доступа к этим файлам на различных операционных системах.

    В ActionScript объект File является указателем на какой-либо файл или папку. Класс File содержит статичное свойство documentsDirectory. В нем хранится объект типа File, который в свою очередь является указателем на папку с документами пользователя. Т. е. на папку «My Documents» в Windows, и на папку «Documents» в пользовательской директории на Mac OS, как показано в следующем примере:

    Actionscript:
    1. trace(File.documentsDirectory.nativePath)
    2. // В Windows: C:Documents and SettingsjoeMyDocuments
    3. // В Mac OS: /Users/joe/Documents

    В том случае, если объект File является указателем на директорию, то вы можете воспользоваться методом resolve(), для смены этого указателя на файл или папку, находящиеся в этой директории, даже если ни файл, ни папка еще не существуют. Например, следующий код создает подпапку Apollo Test в директории документов пользователя:

    Actionscript:
    1. var newDir:File = File.documentsDirectory;
    2. newDir = newDir.resolve("ApolloTest");
    3. newDir.createDirectory( );

    Объект File может указывать на любой файл или директорию. Кроме того, объект File может указывать даже на несуществующий файл или папку, как было показано в предыдущем примере. Это позволяет экземпляру File ссылаться на директорию, которую вы еще только желаете создать.

    Свойства класса File для доступа к основным директориям системы

    Класс File содержит следующие статические свойства, которые указывают на часто используемые папки на компьютерах пользователей:

    Свойство Описание
    File.appStorageDirectory Каждое установленное Apollo приложение получает в свое распоряжение директорию для хранения собственных ресурсов. Это отличное место для хранения файлов, которые могут требоваться для работы приложения, но которые лучше не показывать пользователю. Здесь можно хранить лог-файлы, файлы кэша и файлы с настройками приложения.
    File.appResourceDirectory Папка установки приложения.
    File.currentDirectory Это директория, в которой был запущен файл. Вы можете использовать это свойство для определения пути к файлу и получения любого параметра командной строки, которые были переданы приложению.
    File.desktopDirectory Папка рабочего стола пользователя.
    File.documentsDirectory Папка документов пользователя. «My Documents» в Windows, и подпапка «Document» в папке пользователя на Mac OS.
    File.userDirectory Домашняя директория пользователя. Для примера, в Mac OS это папка Users/username, а в Windows обычно это папка c:\Document and Settingsusername.

    Свойства url и nativePath объекта File

    Свойство url объекта File возвращает расположение файла или папки в виде кроссплатформенной URL строки, как показано в следующем примере:

    Actionscript:
    1. var directory:File = File.userDirectory;
    2. trace(directory.url)
    3. // в Windows: file:///C:/Documents%20and%20Settings
    4. // в Mac OS: file:///Users

    В то же время, свойство nativePath возвращает строку в адресной нотации текущей операционной системы. Например, вы можете использовать следующий код для получения доступа к определенному файлу в Windows:

    Actionscript:
    1. var file:File = new File( );
    2. file.nativePath = "c:/ApolloTest/surprise.txt";

    Но вместо этого гораздо надежнее воспользоваться одним из свойств, перечисленных в вышележащей таблице (например, свойством appStorageDirectory, которое указывает на папку установки приложения независимо от операционной системы) и методом resolve(), чтобы создать относительный путь к нужному нам файлу:

    Actionscript:
    1. var logFile:File = File.appStorageDirectory;
    2. logFile = logFile.resolve("log.txt");

    Не забывайте, то в директории File.appStorageDirectory можно хранить файлы, которые потребуются приложению в будущем, но для которых нежелательно, чтобы о них знал пользователь.

    Структуры URI

    Структура URI определяет начало URL, так как строка «file» в следующем примере:

    Actionscript:
    1. file:///c:/ApolloTest/test.txt

    app-storage

    Обозначает директорию для хранения ресурсов приложения, как показано в следующем примере:

    Actionscript:
    1. var logFile:File = File.appStorageDirectory;
    2. logFile = logFile.resolve("log.txt");
    3. trace(logFile.url); // app-storage:/log.txt

    app-resource

    Обозначает папку установки приложения, как показано ниже:

    Actionscript:
    1. var installDir:File = new File( );
    2. installDir.url = "app-resource:/";
    3. installDir = installDir.resolve("HelloWorld-app.xml");
    4. trace(installDir.url); // app-resource:/HelloWorld-app.xml

    file

    Свойство url других объектов File возвращает URL с путем к файлу в стандартной file схеме URI:

    Actionscript:
    1. var file:File = File.documentsDirectory;
    2. file = file.resolve("ApolloTest/test.txt");
    3. trace(file.url);
    4. // On Windows:
    5. // file:///C:/Documents%20and %20Settings/ ... /test.txt
    6. // On Mac OS:
    7. // file:///Users/userName/Documents/ ... /test.txt

    Синхронные и асинхронные версии методов

    Многие методы классов File и FileStream (такие как File.copyFile() и File.copyFileAsync()) имеют как синхронные, так и асинхронные версии.

    Синхронные методы не передают управление другим ActionScript инструкциям до завершения файловой операции. Асинхронные методы работают в фоновом режиме, позволяя в это время исполняться другим ActionScript процессам. Когда асинхронная файловая операция завершается, производится рассылка события всем слушателям о том, что операция выполнена.

    Следующий пример иллюстрирует операцию копирования файла с использованием синхронного метода copyTo():

    Actionscript:
    1. var file1:File = File.documentsDirectory.resolve("ApolloTest/test.txt");
    2. var file2:File = File.documentsDirectory.resolve("ApolloTest/copy of test.txt");
    3. file1.copyTo(file2);
    4. trace("Ничего не выводится в панель Output пока файл не скопируется.");

    В следующем примере показано копирование файла с использованием асинхронного метода copyToAsync():

    Actionscript:
    1. var file1:File = File.documentsDirectory.resolve("ApolloTest/test.txt");
    2. var file2:File = File.documentsDirectory.resolve("ApolloTest/copy of test.txt");
    3. file1.copyToAsync(file2);
    4. file1.addEventListener(Event.COMPLETE, completeHandler);
    5. trace("Эта строка кода выполняется до завершения копирования.");
    6. trace("Так же как и эта.");
    7. private function completeHandler(event:Event):void {
    8.     trace("Выполнено.");
    9. }

    В следующей таблице перечислены асинхронные методы класса File (для каждого из которых есть свой синхронный аналог) и события, которые рассылаются после выполнения метода:

    Асинхронный файловый метод События
    copyToAsync() complete, ioError
    deleteDirectoryAsync() complete, ioError
    deleteFileAsync() complete, ioError
    listDirectoryAsync() directoryListing, ioError
    moveToAsync() complete, ioError
    moveToTrashAsync() complete, ioError

    Для того чтобы открыть файл используйте метод open() или openAsync() объекта FileStream. В первом случае операция открытия файла является синхронной, во втором — асинхронной. Чтобы узнать больше про эти методы, смотрите раздел «Методы open() и openAsync()» ниже в этой главе.

    Используйте асинхронные методы там, где вы хотите быть уверенными, что основной ActionScript процесс (такой, например, как обновление прогресса выполнения операции) не будет остановлен во время выполнения файловой операции. Т.е. вы можете использовать синхронный метод open() объекта FileStream, если собираетесь открыть файл размером менее 1 Мб, однако используйте метод openAsync() если размер открываемого файла большой или заранее не известен.

    За дополнительной информацией об асинхронных методах обратитесь к главе «Handling Events» книги «Programming ActionScript 3.0».

    Чтение содержимого папки

    Метод File.listDirectory() возвращает массив, состоящий из объектов типа File, представляющих собой файлы и папки, содержащиеся в директории, для которой был вызван этот метод. Для примера, следующий код выводит список содержимого папки рабочего стола:

    Actionscript:
    1. var directory:File = File.desktopDirectory;
    2. var contents:Array = directory.listDirectory( );
    3. for (var i:uint = 0; i <contents.length; i++) {
    4.     if (contents[i].isDirectory) {
    5.         trace(contents[i].name);
    6.     } else {
    7.         trace(contents[i].name,
    8.         contents[i].size,
    9.         "bytes");
    10.     }
    11. }

    Метод File.listDirectory() возвращает массив состоящий из файлов и папок, только непосредственно находящихся в текущей директории. Т.е. он не возвращает содержимое подпапок. Но вы, конечно же, можете написать код, обходящий вложенные папки, для того, чтобы получить список их содержимого, воспользовавшись методом File.listDirectoryAsync(), чтобы позволить выполняться другому ActionScript коду, до того момента, пока операция обхода вложенных папок не будет выполнена.

    За дополнительной информацией об асинхронных методах обратитесь к главе «Handling Events» книги «Programming ActionScript 3.0».

    Доступ к файловой информации

    В классе File содержится несколько свойств, с помощью которых можно получить информацию о файле или папке.

    Свойство Описание
    exists Состояние, когда файл или папка существует. Свойство необходимо проверять, перед тем как, например, попытаться прочитать, записать, копировать, или переместить файл.
    isDirectory Свойство, показывающее, что объект File является указателем на папку (true) или файл (false). Вам нужно будет проверять это свойство до того, как вы будете проводить над объектом операции, присущие папкам (такие, как метод listDirectory()) или файлам (чтение, запись).
    isHidden Показывает, является ли файл или папка скрытым.
    nativePath Путь до папки или файла в виде строки, в нотации текущей операционной системы.
    parent Указатель на вышележащую директорию в виде экземпляра класса File.
    url Путь до файла или папки в независимой от текущей операционной системы URL-нотации.

    Кроме того, класс File унаследовал от класса FileReference несколько полезных свойств:

    Свойство Описание
    creationDate Дата создания файла или папки.
    modificationDate Дата последней модификации файла.
    name Название файла или папки.
    size Размер файла в байтах.

    Copying and Moving

    Процедуры копирования и перемещения файлов и папок

    Методы File.copyTo() и File.moveTo(), соответственно, копируют и перемещают файл или папку в указанное новое местоположение. Например, следующий код копирует файл test.txt, находящийся в папке Apollo Test, которая находится в папке документов пользователя, в папку User Data, находящуюся в папке хранения ресурсов приложения:

    Actionscript:
    1. var file1:File = File.documentsDirectory.resolve("Apollo Test/test.txt");
    2. var destination:File = File.appStorageDirectory.resolve("User Data");
    3. destination.createDirectory();
    4. var file2:File = destination.resolve("test.txt");
    5. file1.copyTo(file2);

    Используйте асинхронные версии File.copyToAsync() и File.moveToAsync() этих методов, если операция копирования или перемещения может занять много времени.

    Каждый из этих методов содержит параметр clobber, установка значения true которого включает режим перезаписи исходных файлов. По умолчанию значением параметра является false.

    Создание файлов и папок

    Статичные методы File.createTempFile() и File.createTempDirectory() класса File позволяют вам создавать временные файлы и папки. Apollo гарантирует, что файл или папка, созданные при помощи этих методов, будут новыми, и будут иметь уникальные названия. Для примера, следующий код создает временный файл:

    Actionscript:
    1. var bufferStorage:File = File.createTempFile();

    Временные файлы и папки не удаляются автоматически при закрытии Apollo приложения. Необходимо «вручную» удалять их перед закрытием. Смотрите раздел «Удаление файлов и папок» для получения дополнительных сведений об операциях удаления.

    Метод File.createDirectory() позволяет вам создавать новые папки в локациях, определяемых объектом File:

    Actionscript:
    1. var directory = File.documentsDirectory;
    2. directory = directory.resolve("ApolloTest");

    Когда вы открываете объект FileStream для операций записи, то папки, содержащиеся в пути к файлу, создаются автоматически, если это необходимо. Для получения дополнительной информации об объекте FileStream обратитесь к разделу «Чтение и запись файлов» ниже в этой главе.

    Удаление файлов и папок

    Метод File.deleteFile() удаляет файл. Метод File.deleteDirectory() удаляет папку. Метод File.moveToTrash() позволяет вам переместить файл или директорию в системную корзину.

    Каждый из этих методов имеет асинхронный аналог.

    Чтение и запись файлов

    Класс FileStream предоставляет методы, позволяющие приложению читать и записывать данные в файл.

    Ниже представлен приблизительный процесс считывания и записи данных в файл:

    1. Создание объекта класса File, являющегося указателем на файл, данные которого необходимо прочесть или записать. За подробностями обратитесь к разделу «Доступ к файлам и папкам» выше в этой главе.
    2. Создать экземпляр объекта FileStream, к примеру, следующим образом:

      Actionscript:
      1. var stream:FileStream = new FileStream( );

    3. Вызвать метод FileStream.open() или FileStream.openAsync(), передав ему в качестве параметра объект класса File, указывающий на необходимый файл, а так же определенный режим открытия файла в виде параметра fileMode. Пример:

      Actionscript:
      1. stream.open(file, FileMode.READ);

      Для получения дополнительной информации смотрите раздел «Режимы открытия файлов» ниже в этой главе.

    4. Если был вызван асинхронный метод FileStream.openAsync(), то необходимо также назначить метод слушатель события открытия файла, как это делается, смотрите в разделе «Методы open() and openAsync()» чуть ниже.
    5. Произвести операции по чтению и записи данных в файл. За дополнительной информацией обратитесь к разделу «Методы записи и чтения» ниже в этой главе.
    6. Закрыть файл, используя метод FileStream.close(), например:

      Actionscript:
      1. stream.close();

    Разберем более детально шаги 3, 4 и 5. Для начала, рассмотрим синхронную процедуру чтения текста в кодировке UTF-8 из файла:

    Actionscript:
    1. var file:File = File.appStorageDirectory;
    2. file = file.resolve("settings.xml");
    3. var stream:FileStream = new FileStream();
    4. stream.open(file, FileMode.READ);
    5. var data:String = stream.readUTFBytes(stream.bytesAvailable);
    6. stream.close();

    А это та же самая операция, но в асинхронном варианте:

    Actionscript:
    1. var file:File = File.appStorageDirectory;
    2. file = file.resolve("settings.xml");
    3. var stream:FileStream = new FileStream();
    4. stream.openAsync(file, FileMode.READ);
    5. stream.addEventListener(Event.COMPLETE, readData);
    6. var data:String;
    7. private function readData(event:Event):void {
    8.     data = stream.readUTFBytes(stream.bytesAvailable);
    9.     stream.close();
    10. }

    Методы open() и openAsync()

    Вашему приложению необходимо открыть файл до того как будет произведено чтение или запись данных из него.

    Когда вы открываете файл асинхронным методом FileStream.openAsync(), то вам нужно зарегистрировать слушателей событий для отслеживания прогресса операции открытия.

    Вызов метода FileStream.open() является синхронной операцией. Если ваше приложение открывает файл, используя синхронный метод, то до завершения файловой операции не будет выполняться никакой другой код в приложении. Так, в следующем примере, сначала будут полностью завершены методы stream.open(), stream.writeUTFBytes(), stream.close(), и только после этого будет возможно выполнение следующего кода:

    Actionscript:
    1. var newFile:File = File.documentsDirectory;
    2. file = file.resolve("ApolloTest/test.txt");
    3. var stream:FileStream = new FileStream()
    4. stream.open(file, FileMode.WRITE);
    5. stream.writeUTFBytes("This is some sample text.");
    6. stream.close();

    Преимуществом открытия файла с использованием синхронной операции является то, что вам придется писать меньшее количество кода для осуществления этой задачи. Минусом является то, что выполнение другого ActionScript кода будет приостановлено на время выполнения операции. Как результат, если вы работаете с файлами большими по объему, либо файлами, доступ к которым осуществляется через медленное сетевое соединение, то нужно будет подумать о целесообразности применения асинхронного метода FileStream.openAsync().

    Когда вы используете метод FileStream.openAsync(), то все следующие процессы должны быть обработаны асинхронно с помощью слушателей событий:

    • Закрытие файла. Объект FileStream рассылает событие close, когда файл закрыт.
    • Чтение данных в буфер. Объект FileStream рассылает событие progress во время считывания новой порции данных из файла и событие complete, когда все данные прочитаны. Если данные из файла были уже прочитаны однажды, то вызов метода чтения повторно (такого как, readBytes()) выполнит чтение как синхронный процесс.
    • Ошибки ввода/вывода. Объект FileStream рассылает событие ioError при обнаружении ошибки. Для этого возможно несколько причин, например, была произведена попытка записи в файл, когда тот открывался только для чтения. Однако, некоторые ошибки, такие, например, как доступ к чтению данных из файла в то время, когда файл еще не был открыт, вызывают выброс исключений (более значимых, чем рассылка события ioError), потому что среда исполнения Apollo смогла обнаружить сбойную ситуацию незамедлительно.

    Перед вызовом метода FileStream.openAsync() в вашем приложении необходимо определить функции слушатели события, которые будут вызваны по завершению асинхронной операции открытия файла.

    Следующий пример иллюстрирует асинхронное открытие файла в режиме чтения. После того как файл будет открыт, будет разослано событие завершения операции (либо, если будет обнаружена ошибка, будет разослано событие ошибочного завершения операции ioError, как только ошибка будет обнаружена). В теле пользовательского обработчика события completeHandler() происходит вызов метода FileStream.readBytes(), который в асинхронном режиме считывает данные из файла в массив байтов. Когда все байты данных файла будут прочитаны, будет разослано событие complete:

    Actionscript:
    1. var file:File = File.documentsDirectory.resolve("ApolloTest/test.txt");
    2. var stream:FileStream = new FileStream();
    3. stream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    4. stream.addEventListener(Event.COMPLETE, completeHandler);
    5. stream.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    6. stream.addEventListener(Event.CLOSE, closeHandler);
    7. stream.openAsync(file, FileMode.READ);
    8. var data:ByteArray = new ByteArray();
    9. private function progressHandler(event:ProgressEvent):void {
    10.     trace(stream.bytesAvailable, "байты считаны.");
    11. }
    12. private function completeHandler(event: Event):void {
    13.     data = stream.readBytes(stream.bytesAvailable);
    14.     stream.close();
    15. }
    16. private function ioErrorHandler(event:IOErrorEvent):void {
    17.     trace("Обнаружена ошибка операции ввода/вывода.");
    18. }
    19. private function closeHandler(event: Event):void {
    20.     trace("Файл закрыт.");
    21. }

    Режимы открытия файлов

    Оба метода FileStream.open() и FileStream.openAsync() принимают два параметра: параметр file, являющийся указателем на файл, который необходимо открыть, и параметр fileMode, являющийся строкой, определяющей, с какими правами будет произведено открытие файла. Все возможные значения параметра fileMode определены в качестве констант класса FileMode.

    Например, следующий код синхронно открывает файл для записи в него данных, но не для чтения:

    Actionscript:
    1. stream.open(file, FileMode.WRITE);

    В таблице перечислены константы класса FileMode и их описание:

    Константа Определение
    FileMode.APPEND Файл открывается только для записи, причем вся записываемая информация добавляется в конец файла. Перед открытием проверяется существование файла, и если файл еще не существует, то он создается автоматически.
    FileMode.READ Файл открывается только для чтения. Файл должен существовать (при его отсутствии он не создается).
    FileMode.UPDATE Файл открывается в режиме чтения/записи. И запись данных возможна в любую позицию файла. Если файл не существует, то он создается.
    FileMode.WRITE Файл открывается только в режиме записи. Если файл не существует, то он создается. При открытии файл будет полностью перезаписан.

    Методы чтения и записи

    Класс FileStream содержит некоторое число методов чтения и записи, которые приводят данные к определенному формату перед их записью или чтением. Например, вы можете использовать методы readUTFBytes() и writeUTFBytes() для того, чтобы прочитать или записать массив байтов, или же методы readByte() и writeByte() чтобы прочитать или записать одиночный байт данных. Всего в этом классе содержится 26 методов чтения и записи данных. За детальными описаниями этих методов обратитесь к документации по классу FileStream в Справочнике по языку ActionScript, который распространяется вместе с Apollo.

    Хотя чтение и запись текстовых данных может показаться вам тривиальной задачей, вы всегда должны учитывать кодировку текстового файла. Методы readUTFBytes() and writeUTFBytes() предоставляют возможность считывать и записывать текст в кодировке UTF-8. Методы readMultiByte() и writeMultiByte() позволяют вам определять распознавать различные кодировки символов файла. Однако все возможные ситуации предугадать нельзя. Например, файл в кодировке UTF-8 может начинаться с маркирующего байта (BOM), указывающего на кодировку UTF-8, но содержать при этом кусок данных в другой кодировке.

    За дополнительной информацией обратитесь к разделу «Data formats, and choosing the read and write methods to use» в Apollo Developer’s Guide.

    Дополнительная информация

    За примерами чтения и записи данных в файл обратитесь к следующим разделам главы 5:

    • Запись текстового файла из строки (объекта String);
    • Чтение текстового файла в строку (в объект String);
    • Конвертация изображений (объектов BitmapData) в форматы PNG или JPEG, а так же их запись в файловой системе;
    • Сериализация и десериализация объектов ActionScript для их сохранения в виде файлов.

    Комментариев нет

    Теги:
    22 августа 2006

    MTASC FAQ

    С любезного разрешения Николя Каннассе (Nicolas Cannasse) перевел главную страницу сайта MTASC.org. В результате получился своеобразный MTASC FAQ. Странно, что до сих пор никто этого не сделал. По-моему, время сэкономленное в результате использования самого быстрого в мире компилятора .as файлов гораздо больше чем время, потраченное на перевод этой статьи. Но так или иначе теперь для многих статьи Constantiner-а, в которых он пишет про компиляцию с использованием MTASC-а, станут более понятными.

    Содержание:

    Знакомство

    MTASC Logo
    MTASC — это первый бесплатный ActionScript компилятор с открытыми исходными кодами.

    Он может компилировать большое число .as файлов классов за очень короткое время и немедленно сгенерировать соответствующий байткод в SWF файл без необходимости в наличии Macromedia Flash и других приложений.

    Вы можете загрузить его прямо сейчас, но прежде прочтите сравнение между MTASC и Macromedia Compiler (MMC), который поставляется вместе с Flash. Если это ваш первый опыт использования MTASC, прочтите инструкцию по установке и использованию MTASC. Пожалуйста, посетите также сайт сообщества OSFlash.

    Добавьте логотип MTASC на ваш сайт!

    Установка

    Ниже приведена инструкция по установке MTASC для его использования из-под командной строки на операционных системах семейства Windows.

    Для начала, загрузите соответствующую для вашей системы сборку MTASC и инсталлируйте/распакуйте все, что входит в ее состав, на ваш компьютер. Затем добавьте путь до исполняемого файла в переменную среды PATH (смотрите http://www.chem.gla.ac.uk/~louis/software/faq/q1.html, если вы не знаете как это делается). Например, если вы проинсталлировали компилятор в папку c:\program files\mtasc, то в качестве переменной среды вы должны будете добавить c:\progra~1\mtasc. Теперь все готово к использованию. Вы можете создать файл compile.bat, содержащий следующий текст:

    CODE:
    1. mtasc.exe ВашФайл.as -swf ВашПроект.swf
    2. pause

    Поместите файл compile.bat совместно с файлами вашего проекта и запустите его, когда вам нужно будет скомпилировать проект.

    Использование

    MTASC — компилятор, работающий из-под командной строки. Он может легко интегрироваться с вашим любимым редактором .as файлов для их компилирования с его помощью. В основном, использование компилятора заключается в вызове следующей команды: mtasc "путь_до_ваших_.as_файлов_классов" -swf "путь_до_swf_файла_вашего_проекта". Помните, что если вы имеете два класса, например, Point и Line, причем класс Point используется в коде класса Line, то вам нет необходимости указывать компилятору, чтобы он скомпилировал класс Point. MTASC сделает это автоматически, как только в коде класса Line обнаружит ссылку на класс Point. Поэтому, если вы хотите включить в приложение минимальное количество классов, необходимых для запуска приложения, то вы можете просто скомпилировать, используя класс Main.as, где Main.as — главный класс вашего проекта, содержащий точку входа в приложение.

    Теперь, когда вы знаете, как обращаться с MTASC, давайте посмотрим как он работает. MTASC находит соответствующий SWF файл когда обнаруживает параметр -swf, компилирует все необходимые .as файлы и обновляет SWF файл путем замещения всех классов, которые до этого в нем содержались, на новые скомпилированные классы.

    Очень просто начать использовать MTASC вместо MMC. Откройте свой проект и опубликуйте его так, как вы обычно это делаете с помощью Macromedia Flash (предположим, что скомпилированный файл называется project.swf). Теперь запустите MTASC, используя путь до опубликованного SWF файла в качестве аргумента: mtasc (ваши .as файлы) -swf project.swf. Все классы будут скомпилированы и обновлены в SWF файле. Помните, что MTASC добавляет скомпилированные классы в SWF файл путем замещения всех классов, до этого скомпилированных во Flash.

    Если во время компиляции у вас возникают ошибки, такие как «Класс не найден» (class not found), «Файл не найден» (file not found), «Ошибка в имени класса» (class name mistake), то вам следует использовать параметр -cp для того, чтобы добавить путь к пакету классов (другими словами, директорию, в которой следует искать .as файлы). Например, если ваши классы находятся в папке /code, то не нужно вызывать команду mtasc code/Hello.as, потому что это приведет к поиску класса code.Hello (вместе с названием пакета), а нужно вызвать mtasc -cp code Hello.as.

    Ниже приведены остальные параметры использования MTASC:

    • -swf файл — задает файл SWF, в который будут помещены скомпилированные файлы классов;
    • -cp путь — добавляет директорию в ClassPath проекта. В этом параметре задаются директории, в которых MTASC будет искать .as файлы с классами. Вы можете несколько раз использовать этот параметр, для добавления нескольких директорий;
    • -main — производит автоматический вызов метода main, для основного класса ролика. Внимание: метод main должен принимать один параметр container:MovieClip, в качестве которого MTASC передаст ссылку на основную временную диаграмму _root ролика. Чтобы понять почему это важно, прочитайте эту статью;
    • -header width:height:fps:bgcolor — вместо использования готового SWF файла, заставляет MTASC скомпилировать новый файл, содержащий только код, и использовать для этого предопределенные параметры публикации. Параметр bgcolor - необязательный. В качестве него вы должны подставить шестнадцатеричное число (например, FF0000);
    • -mx — использовать заранее скомпилированные MX классы (смотрите ниже секцию о компонентах V2).

    А вот другие аргументы, предназначенные для опытных пользователей:

    • -version номер_версии — определяет версию SWF файла. Обозначьте версию 6, для создания SWF, совместимого с 6r89 сборкой проигрывателя. Или версию 8, для того, чтобы использовать возможности 8 версии плеера;
    • -v — активирует подробный режим, в котором выводится дополнительная информация о процессе компиляции;
    • -out путь_к_файлу — изменяет адрес конечного SWF файла;
    • -msvc — использование стиля форматирования ошибок как в Microsoft Visual Studio, а не стиля Java (для имен файлов и номеров линий);
    • -strict — будет использован строгий режим компиляции, требующий, чтобы все переменные были типизированы;
    • -exclude файл — исключает генерацию кода для классов, перечисленных в специальном файле (каждый из путей к исключаемым классам, должен располагаться на новой строке этого файла);
    • -trace функция — определяет пользовательскую функцию трассировки (см. секцию «Средства трассировки») или no для деактивации всех действий трассировки;
    • -keep — сохраняет все AS2 классы, скомпилированные Macromedia компиллером в SWF файле (это также действует на классы, которые до этого были скомпилированы при помощи MTASC);
    • -frame номер_кадра — позволяет экспортировать AS2 классы в определенный кадр ролика;
    • -pack путь_до_пакета — компилирует все классы, содержащиеся в указанном пакете без рекурсии (так, для компиляции файлов из папки c:\flash\code\my\app пакета my.app, необходимо вызвать команду mtasc -cp c:\flash\code -pack my/app);
    • -group — объединяет классы в один единственный клип (это приводит к уменьшению размера SWF, но может привести к возникновению проблем, при использовании параметров -keep и -mx);
    • -wimp — добавляет предупреждения для инструкций импорта, которые не используются в файле класса;
    • -infer — добавляет предугадывание типа при инициализации локальных переменных (см. ниже).

    Примеры

    Теперь вы знаете, как использовать MTASC с помощью командной строки. В следующих простых примерах мы рассмотрим, как с ним работать. В первом примере не используется заранее подготовленный файл SWF с содержимым, поэтому создается новый файл, содержащий только код класса Tuto.as, выводящего в текстовом поле некоторый текст:

    Actionscript:
    1. class Tuto {
    2.  
    3.     static var app : Tuto;
    4.  
    5.     function Tuto(container:MovieClip) {
    6.         // Создаем текстовое поле 'tf' с размерами 800x600
    7.         // и координатами 0,0.
    8.         container.createTextField("tf",0,0,0,800,600);
    9.         // Выводим текст в текстовом поле.
    10.         container.tf.text = "Hello world !";
    11.     }
    12.  
    13.     /**
    14.      * Точка входа в приложение.
    15.      *
    16.      * @param   container  Ссылка на основную временную диаграмму ролика _root.
    17.      */
    18.     static function main(container:MovieClip):Void {
    19.         app = new Tuto(container);
    20.     }
    21. }

    Если вы захотите запустить это приложение, то это можно сделать вызовом следующей команды:

    CODE:
    1. mtasc -swf tuto.swf -main -header 800:600:20 Tuto.as

    Первый параметр -swf tuto.swf задает имя конечного файла. Третий параметр -header 800:600:20 заставляет MTASC скомпилировать новый SWF с размерами сцены 800x600 пикселов и частотой смены кадров 20 FPS. Второй параметр -main говорит, что необходимо вызвать метод main у всех инициализируемых классов. Последний параметр — компилируемый файл класса. Если вам необходимо скомпилировать несколько файлов, то вы просто можете перечислить их поочередно в командной строке без каких-либо проблем. Однако, не включайте таким способом пути к большому количеству файлов, компилируемых с помощью MTASC, используйте для этого параметр -cp (см. ниже).

    Если для вашего кода необходимо использование библиотеки классов, которая локально расположена где-нибудь на вашем компьютере, то вам нужно использовать параметр -cp, чтобы MTASC смог найти нужные файлы классов. Например, если вы используете класс mx.controls.Button, расположенный на вашем жестком диске в папке C:\Program Files\Macromedia\Flash MX 2004\en\First Run\Classes\mx\controls, вам нужно вызвать следующую команду:

    CODE:
    1. mtasc -cp "C:\Program Files\Macromedia\Flash MX 2004\en\First Run\Classes"

    Не забывайте пути к классам, содержащие пробелы, указывать в кавычках и не забывайте удалять пути к файлам, если необходимости в их компиляции уже нет. Если вам нужно скомпилировать класс app.File.as, расположенный на жестком диске по адресу C:\My Project\app\File.as, запустите следующую команду:

    CODE:
    1. mtasc -cp "C:\My Project" app\File.as

    Если вам необходимо скомпилировать все файлы из пакета app, то используйте параметр -pack app и, если необходимо, параметр -cp для компиляции других классов.

    Загрузка

    Последние сборки компилятора для различных платформ и исходные файлы доступны для скачивания с соответствующего раздела официального сайта MTASC.

    Другие инструменты:

    • Графический интерфейс, созданный человеком по имени Daniel Aguilar (не возьмусь переводить фамилию) доступен по адресу http://www.protozoo.com;
    • Другой GUI для MacOSX: http://www.telefonica.net/web2/xmtasc.

    Контакты

    Если у вас возникают проблемы при использовании MTASC, или у вас есть вопросы, или предложения по добавлению новых возможностей в MTASC, то вы можете подписаться на мэйл лист. Здесь же вы можете поискать в архиве сообщений ответ на вопрос, аналогичный вашему. Если вы не хотите использовать лист рассылки, или если вы хотите получить информацию или персональную поддержку, вы можете связаться с создателями MTASC, воспользовавшись следующим адресом электронной почты: ncannasse@motion-twin.com.

    Если вы ищете ресурс о других бесплатных Flash приложениях, то посетите сайт OSFlash.org, там содержится огромное количество информации на эту тему. В частности, именно на нем в настоящий момент расположен MTASC FAQ, в качестве одного из разделов Wiki.

    Использование компонентов (пакет MX)

    MTASC позволяет использовать при компиляции компоненты Macromedia V2, но для этого рекомендуется добавлять дополнительный параметр: -mx. Ниже показан простой пример использования компонентов.

    1. Давайте напишем небольшое приложение, использующее Macromedia V2 компоненты, состоящее из одного файла класса Test.as:
      Actionscript:
      1. class Test {
      2.     function Test() {
      3.         mx.controls.Alert.show("hello world","title");
      4.     }
      5. }

    2. Откройте Flash IDE, создайте новый документ, назовите его «test.fla» и добавьте компонент Alert в библиотеку;
    3. Добавьте следующий код в первый кадр документа: t = new Test(); (это необходимо для того, чтобы ваше приложение заработало);
    4. Опубликуйте файл как test.swf и протестируйте. Должно появиться всплывающее окно;
    5. С этого момента больше нет необходимости во Flash IDE (конечно, если вы не будете использовать другие компоненты). Закройте ее!
    6. Подправьте код приложения Test.as, так как посчитаете нужным (вдруг вы захотите что-нибудь изменить в нем);
    7. Для повторной компиляции с помощью MTASC используйте следующую команду:
      CODE:
      1. mtasc -cp "путь_до_папки_с_классами_компонентов" -mx -swf test.swf Test.as

      Где путем до классов компонентов может быть "c:\program files\macromedia\flash mx 2004\en\First Run\Classes";

    8. Желаем быстрой компиляции!

    MTASC и ActionScript 3

    Последняя версия MTASC является наиболее стабильной. Так, при обновлении до нее версии 1.11, разработчики в основном фокусировались на исправлении мелких ошибок и общем улучшении работы компилятора. Некоторые люди спрашивают о будущем MTASC. Их интересует, будет ли следующая версия публиковать SWF под девятую версию плеера и поддерживать ActionScript 3.

    MTASC не будет иметь поддержки ActionScript 3, так как сейчас ведутся работы над новым мощным языком, названным haXe, который будет поддерживать Flash Player 6-7-8 и 9, также как и JavaScript и серверные скриптовые языки.

    Вы можете подробнее узнать об этом на сайте haXe.org.

    Сравнение MTASC и Macromedia Flash Compiler

    MTASC корректно обрабатывает некоторые известные проблемы, происходящие при использовании Macromedia Compiler (MMC). Он является более строгим компилятором, поэтому может определять большее количество ошибок, что помогает вам в написании более качественных программ. Вследствие этого, появляются некоторые различия между MMC и MTASC, поэтому при первых попытках компиляции с использованием MTASC у вас могут появиться ошибки.

    Тем не менее, перед разработчиками компилятора стояли следующие задачи, которые пользователь сейчас может без проблем использовать:

    1. Переходить на компиляцию с использованием или MMC, или MTASC, что поможет исправить многие ошибки в вашем коде, легко и правильно его модифицировать. Это делает ваш код более надежным.
    2. Компилировать с помощью MMC. Разработчики не планируют перевести всех пользователей с MMC на MTASC . И не ставят перед собой задачу создать вокруг этого компилятора собственное сообщество. Как инструмент, MTASC не вносит никаких несовместимых нововведений в язык ActionScript. (Невольно вспоминается война за место под солнцем между браузерами Netscape и IE, приведшая к очень печальным последствиям. — Прим. пер.).

    Скорость и баги

    MMC ужасно медленный. Он целую вечность компилирует большие проекты, и с этим фактом невозможно не считаться, так как приходится все это время ждать и откладывать дальнейшее редактирование проекта. Кроме того, MMC иногда вынуждает вас перезагружать компьютер или несколько раз компилировать ваш проект, для получения пригодного результата (это связано с багом в использовании оперативной памяти, смотрите статью http://www.actionscript.com/archives/00000591.html для получения дополнительной информации об этой ошибке).

    MTASC основан на лучшей из доступных технологий компилирования (а именно, на языке программирования OCaml), и поэтому у него гораздо выше скорость компилирования, чем у MMC (компилирует 100 классов менее чем за 5 секунд). С тех пор, как исходные коды были сделаны более компактными и для их написания использовались хорошие технологии, стало возможным легко поддерживать и расширять его функциональность, применяя испытанные алгоритмы. Обратная связь с разработчиками очень помогает Open Source сообществу в короткие сроки исправлять различные ошибки.

    Вывод: Неужели этого еще мало?

    Цена и общая стоимость владения

    Смотрите предыдущий абзац о том, как MMC тратит попусту ваше время (считайте, что деньги). Если вы профессиональный ActionScript программист, то должны понимать, о чем здесь говорится.

    MTASC бесплатен и, к тому же, имеет открытые исходные коды. Поэтому вы можете бесплатно его использовать, изменять исходные коды так как посчитаете необходимым и при выходе новых версий компилятора бесплатно получать исправления ошибок в его работе.

    Вывод: Разработчики верят, что опенсорсное движение спасет мир и в первую очередь программистов вашей компании.

    Отслеживание областей определения локальных переменных

    В MMC (да и вообще в Flash Virtual Machine) не блокируется двойное определение переменной внутри функций. Это хорошо иллюстрирует следующий код:

    Actionscript:
    1. function f() {
    2.     var x = 1;
    3.     if( true ) {
    4.         var x = "hello";
    5.         // ...
    6.     }
    7.     trace(x+1);
    8. }

    Будет выведено "hello1", а не число 2. Следующий код тоже работает, несмотря на то, что он не будет компилироваться во многих традиционных языках программирования:

    Actionscript:
    1. function f() {
    2.     if( true )
    3.         var x = 1;
    4.     return x + 1;   // что будет, если в инструкцию if
    5.             // в качестве параметра поступит false?
    6. }

    MTASC препятствует возникновению подобных ошибок. Вы не можете создавать новую локальную переменную с аналогичным именем и не можете использовать локальную переменную за пределами области ее объявления. Следующий пример иллюстрирует это:

    Actionscript:
    1. function f() {
    2.     {
    3.         var x : Number = 1;
    4.         // ... используйте x как Number
    5.     }
    6.     // вы не можете использовать x здесь
    7.     {
    8.         var x : String = "hello";
    9.         // ... используйте x как String
    10.     }
    11.     // вы не можете использовать x здесь
    12. }

    Вывод: сокрытие локальных переменных необходимо для получения более полного контроля над типами переменных и для проверки правильности кода. Flash Virtual Machine недостает лексического отслеживания областей объявления локальных переменных, начиная с предыдущей AS1 версии языка. MTASC во время компиляции активно сообщает вам о конструкциях в коде, подверженых ошибкам, что позволяет экономить много времени во время отладки приложения.

    #include

    MMC позволяет встраивать фрагменты кода из внешних файлов в ваш ролик с использованием директивы #include.

    MTASC не позволяет пользоваться этой директивой.

    Рациональность подобного решения: Подобные практики кода вышли из употребления в ActionScript 2, где программисты должны хранить свой код во внешних файлах классов.

    Определение локальных функций

    MMC позволяет создавать именованные локальные функции:

    Actionscript:
    1. function f(x) {
    2.     function g(y) {
    3.         return x+y;
    4.     }
    5. }

    MTASC позволяет создавать в теле других функций только литералы функций (т .е. анонимные функции, сохраненные в переменной):

    Actionscript:
    1. function f(x) {
    2.     var g = function(y) {
    3.         return x+y;
    4.     };
    5. }

    Рациональность подобного решения: Это необходимо для нахождения различий между определением локальной функции и определением метода.

    Средства трассировки

    MMC предоставляет только простую функцию trace, которая выводит некоторый текст в окно Output (что работает только в IDE). Это не совсем удобно, к тому же многие люди предпочитают вести логи в процессе компиляции и отладки.

    MTASC во время компиляции использует переопределенную функцию trace. Допустим у вас есть такой вот класс:

    Actionscript:
    1. class Test {
    2.  
    3.     static function main(mc) {
    4.         trace("hello world");
    5.     }
    6.  
    7. }

    При компиляции с использованием команды mtasc -trace MyClass.myTrace Test.as (...) все вызовы функции trace будут заменены на вызов функции MyClass.myTrace (т. е. на вашу переопределенную функцию trace) и будут добавлены дополнительные параметры содержащие отладочную информацию. Т. е. будет так, как если бы вы написали:

    Actionscript:
    1. class Test {
    2.  
    3.     static function main(mc) {
    4.         MyClass.myTrace("hello world","Test::main","Test.as",4);
    5.     }
    6.  
    7. }

    Где дополнительными параметрами являются:

    1. Полное имя класса и имя метода;
    2. Название файла класса;
    3. Номер строки, содержащей вызов функции.

    Безусловно, будет очень просто написать свою функцию трассировки, которая, например, будет фильтровать поступающую информацию и выводить сообщения только от тех классов, отладку которых вы производите в настоящий момент. Помните, что функция trace во MTASC может принимать любое количество параметров, и что дополнительная отладочная информация добавляется после всех других параметров.

    Если вы хотите создать окончательную версию вашего приложения, в коде которого не должно содержаться вызовов функции trace, просто используйте параметр командной строки "-trace no" для компиляции приложения и удаления из него всех вызовов trace.

    Строгая типизация массивов

    MTASC содержит расширения синтаксиса языка, которые позволяют строго типизировать ваши массивы, сохраняя при этом совместимость с ActionScript 2:

    Actionscript:
    1. var x : /*String*/ Array;

    Объявленным типом этой переменной является массив (Array), содержащий строки (String). Все обращения к элементам массива для чтения и записи будут проверяться на соответствие типу данных String, к которому принадлежат все элементы этого массива. Типизация элементов массивов — это только дополнительная проверка, производимая компилятором. Она не производится на этапе исполнения приложения. Будьте внимательны и не допускайте пробелов между "/*" и "*/".

    Предугадывание типа локальных переменных

    Если вы используете параметр командной строки -infer, то для всех локальных переменных, которым присвоено какое-либо начальное значение, автоматически объявляется их тип так, как показано ниже:

    Actionscript:
    1. var x : String = "hello";
    2. var x : Number = Math.cos(Math.PI);
    3. var x : MyClass = new MyClass();

    Все эти инструкции могут быть получены из следующего кода путем его компиляции с параметром -infer:

    Actionscript:
    1. var x = "hello";
    2. var x = Math.cos(Math.PI);
    3. var x = new MyClass();

    Вы можете использовать параметр -infer совместно с параметром -strict и ошибки несоответствия типов больше не будут выводиться, поскольку объявленный тип переменных всегда будет совпадать с присваиваемыми им значениями.

    Другие незначительные отличия

    • массив arguments поддерживается, однако к нему нельзя обратиться динамически (с помощью eval("arguments"), например);
    • при компилировании с помощью MTASC, тип параметров сеттеров и возвращаемый тип геттеров могут отличаться друг от друга;
    • при компиляции с использованием MTASC, функции, неимеющие в своем теле инструкции return, автоматически типизируются как возвращающие Void;
    • не поддерживается инициализация членов класса за пределами тела класса (только если это не константа и не статический метод);
    • при компиляции с помощью MTASC свойство клипов root недоступно при вызове без соответствующего контекста. Например, если вы используете _parent внутри класса, в котором не определено соответсвующее свойство, «посыплятся» ошибки компиляции;
    • eval(this) не работает.

    Логотип MTASC для вашего сайта

    MTASC
    Вы можете разместить на своем сайте этот маленький банер (88x31, GIF, 2k) для того, чтобы помочь в продвижении бесплатного компилятора MTASC и open source сообщества:

    HTML:
    1. <a href="http://www.mtasc.org">
    2.     <img src="http://www.mtasc.org/img/mtasc_88x31.gif"
    3.         title="MotionTwin AS2 Compiler"
    4.         alt="MTASC"
    5.         style="border:0px;"
    6.     />
    7. </a>

    3 комментария

    Теги: