Опытный идиотъ
  
Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus
Репутация: 9 Всего: 50
|
Цитата | ивет! Ну вот - есть грандиозный повод напиться. Свершилось то, о чем мы так долго мечатли. Вышел ActionScript 3. Вся информация на новом сайте Макромедии: http://labs.macromedia.com/
Конкретно по AS3 (http://labs.macromedia.com/wiki/index.php/ActionScript_3:Learning_Tips) :
Маленькие фишки для изучения AS 3.0. AS3 является строго-типизированным, отвечающим стандартам, объектно-ориентированным языком программирования, представляющим новую программную модель для среды исполнения Flash Player'а. Если вы уже знакомы с AS1 и AS2, следует узнать о некоторых различиях, которые помогут вам разработать ваше первое приложение на AS3. Для легкого перехода к AS3 мы начали вести список фишечек и общих соображений, которые помогут вам в процессе разработки. Другим полезным ресурсом по теме является сравнительный список AS2 и AS3 (http://livedocs.macromedia.com/labs/1/flex/langref/migration.html) как часть документации по AS3 (http://www.macromedia.com/go/AS3LR).
1. Объявляйте типы для всех переменных, параметров и возвращаемых значений. Объявление типов для всех переменных, параметров и возвращаемых значений рассматривается как рекомендации лучших собаководов и поможет компилятору выдавать вам более содержательные сообщения об ошибках. Это также улучшит производительность времени исполнения потому что виртуальная машина будет заранее знать о типах, с которыми вы работаете. Действительно, мы думаем, что это столь важно, что по умолчанию выдаем предупреждение в подобных ситуациях. Три предупреждения - удаление из числа flash-разработчиков (шутка).
2. Объявления без модификатора доступа теперь подразумевает видимость уровня пакета, а не public как раньше. Модификатором доступа по умолчанию теперь является internal вместо public, подразумевая, что объявление будет видно только в пределах пакета, содержащего определение, а не всего кода. Это согласуется с другими языками, например, глубоко любимой и уважаемой всеми Java'ой. Ввиду того, что объявление по умолчанию в AS2 public, это для многих может стать жестокой подставой, а мы вам рекомендуем всегда указывать модификатор доступа чтобы ваши объявления стали чистыми как водка Абсолют. В целях поощрения этого замечательного начала, AS3-компилятор выдаст вам штрафную и предупреждение за неиспользование модификатора доступа.
3. По умолчанию классы являются изолированными, то есть вы не сможете динамически добавлять свойства во время исполнения. Классы теперь могут быть только динамическими или изолированными. Динамические классы могут позволить добавлять себе свойства во время исполнения, изолированные - никак. Изолированные классы берегут память потому как для них не нужно создавать внутренние хэштаблицы, а компилятор может лучше сообщать об ошибках. Объявление class Foo является изолированным. Для объявления динамического класса, используйте ключевое слово dynamic, типа того: dynamic class Foo.
4. Для помещения класса в пакет теперь необходимо использовать пакетные объявления. В AS3 вводится новое ключевое слово package:
ActionScript 2.0 code: class mx.controls.Button { ... } ActionScript 3.0 code: package mx.controls { class Button { .. } }
В AS3 публичный класс должен находиться в файле, имеющем то же имя. Несколько классов могут быть объявлены в одном файле, но только один класс может быть публичным, а его имя должно совпадать с именем файла.
5. Классы должны быть импортированы даже в том случае, если обращение к нему идет по полному имени. Для использования MyPackage.MyClass вы должны его импортировать:
import MyPackage.*;
или
import MyPackage.MyClass;
Это остается правилом даже если все ссылки на класс осуществляются по полному имени, например MyPackage.MyClass. В AS3 блок импорта указывает на то, что вы желаете использовать определение класса из другого пакета, тогда как в AS2 это нужно лишь для использования коротких имен. В AS3 полное имя класса используется лишь для устранения возможных противоречий, а не как замена импорту.
6. Перегруженные методы должны помечаться как override. Ключевое слово override предотвращает обычные обломы перегруженных методов, таких как задание неправильного имени перегруженного метода или его сигнатуры, или когда имя перегруженного метода меняется (?). Это также облегчает поиск в коде перегруженных методов. Благодаря знанию о высшем предназначении метода в качестве перегружаемого, компилятор может произвести более полезную валидацию. Ключевое слово override было инспирировано аналогичным ключевым словом менее уважаемого языка C#.
7. Связывание данных должно всегда осуществляться с использованием строго типизированных объектов данных, а не свойствами типа Object. Недостаток недостаточной типизированности класса Object может привести к случайным ошибкам кодирования, так что компилятор и в этом случае наливает штрафную и выносит предупреждение. Связывание свойства с полем Object, например, selectedItem.name, приведет к предупреждению, а, возможно, и к удалению. Чтобы остаться в рядах разработчиков, вам необходимо использовать строгую типизацию и кастинг, например EmployeeInfo(selectedItem).name.
8. Функции должны объявлять возвращаемый тип. Это сделано в ваших же интересах, в интересах высшей истины и безопасной типизации, так что вы больше не сможете обделить функцию возвращаемым типом или дать ей безличный тип Object, который дается по умолчанию. Если метод вам ничего не должен, так и напишите в его возвращаемом типе: Void.
9. Delegate теперь встроен в язык, что облегчает обработку событий. В AS2 для управления обработкой события вам необходимо было использовать mx.utils.Delegate или другие кустарные поделки:
import mx.utils.Delegate; myButton.addEventListener(“click”, Delegate.create(this, onClick));
Если кто не успел просечь этой фишки, поступил предусмотрительно, ибо в AS3 ссылка на метод автоматически помнит экзепляр объекта, от которого его отлучили, то есть, в сущности, является автоматическим делегатом. Вы можете переписать старый код проще:
myButton.addEventListener(“click”, onClick);
10. Разыменование null или undefined теперь бросит вам в лицо эксепшн. Разыменование null или undefined в традиционном AS игнорируется и приравнивается к undefined. Теперь будет выброшено исключение TypeError. Следует просмотреть код, в котором могут быть случайные разыменования null или undefine, которые раньше проходили. Новое поведение с выбрасыванием исключений отвечает спецификации ECMAScript. (Добавлю от себя, что здесь речь идет, насколько я понимаю, о невозможности обращения к свойствам и методам таких объектов. Например, var aDate:Date = null; trace (aDate.getTime ()); // выдаст нам TypeError на этапе исполнения)
11. Компиляция с опциями командной строки -verbose-stacktraces и –debug приведет к тому, что имена файлов и номера строк кода будут появляться в алертах времени исполнения Flash-плеера. Когда возникает ошибка времени исполнения, отображается диалог с описанием ошибки и трэйсом стэка (все как в Java). Использование -verbose-stacktraces и –debug облегчит выявление источника ошибки в вашем коде.
12. Свойства больше не являются связываемыми (bindable) по умолчанию. Вы должны объявить их связываемыми с использованием метатэга [Bindable].
13. Flash Player API теперь реорганизован в пакеты. Раньше все классы и методы Flash Player API были глобальными. Теперь все объединено в пакеты, такие как flash.display, flash.events, flash.ui итд. Например, MovieClip теперь стал flash.display.MovieClip, а trace(), getTimer() и setInterval() перемещены в пакет flash.util.
14. Новый класс Timer обеспечивает более ясный механизм для событий таймера по сравнению с setInterval/setTimeout. Новый класс Timer имеет ряд преимуществ по сравнению с setInterval, таких как: мы больше не будем иметь дело идентификаторами интервалов, а будем иметь более современный ООП-интерфейс. Будет круто если все крутые перцы будут пользовать Timer, а не признанные отстойными setInterval/setTimeout.
15. События теперь стали строго типизированными и должны наследоваться от классов, основанных на новом классе Event. Это значит, что вы больше не сможете использовать экземпляр Object при обработке событий. Также вы больше не сможете использовать краткую форму задания объекта, как {type: ‘customEvent’ }. Вместо экземпляра Object вы теперь должны использовать класс Event.
Например: dispatchEvent(new Event ('myCustomEventType')))
Если вы нуждаетесь в дополнительных свойствах, отнаследуйтесь от Event. Мотивация? Безопасность работы с типами и эффективность!
16. Визуальные элементы должны наследовать DisplayObject, и вы можете определять их как все другие классы. Компоненты теперь могут создаваться динамически с использованием new и отображаться методом addChild (). Как результат, createChild() объявлен устаревшим. Визуальные элементы, такие как TextField, могут создаваться как все другие объекты и просто отображены с использованием методов addChild или addChildAt. Заметьте: это означает, что старый API с использованием createEmptyMovieClip() и createTextField() - умер! Если вы хотите создать текстовое поле, используйте new TextField()" вместо "createTextField()".
17. E4X (ECMAScript for XML) теперь рекомендован для работы с XML во Flash. E4X является более мощной альтернативой, лучше встроен в язык, а также предоставляет кучу новых возможностей. Старый класс XML все еще доступен. Если вы предпочитаете работать со старым XML API, переименованным в MLDocument, он все еще доступен в пакете flash.xml.
18. При использовании E4X метод toString не возвращает весь XML. Для этого надо использовать метод toXMLString. Метод toString возвращает адекватную XML-строку для объекта XML. Он не нуждается в сериализации XML-данных. Для E4X используйте toXMLString.
19. for...in теперь не выводит свойства и методы, объявленные в классе. Он выводит лишь динамические свойства объекта. В AS3 введен более продвинутый механизм интраспекции объектов, называемый describeType. Используйте describeType для интроспекции объектов в AS3.
20. Объект root в swf-файле теперь может быть экземпляром пользовательского класса, который вы выберете. В AS2 root всегда является экземпляром MovieClip. В AS3 он может быть любым подклассом Sprite. Вы можете установить определение класса в DocumentRoot вашего swf. При загрузке swf, он инстанциирует root как экземпляр этого класса.
Таким образом, сегодня наступает великий день, после которого совмещение flash-дизайнера, flash-аниматора и flash-программиста будет вряд ли возможным. Посему вношу предложение упразднить слово "флэшер", как дезориентирующее по двум признакам: за границей думают, что в России Flash-технологией занимаются одни лишь эксгибиционисты, а заказчики при поиске не различают, кто им нужен: программист или дизайнер, называя всех флэшерами.
Ну и, понятно, сегодня все flash-разработчики могут напиться на радостях.
Ура!
-- Best regards, Constantiner |
via RuFlash
|