Московский физико-технический институт
Опубликован: 23.12.2005 | Доступ: свободный | Студентов: 2869 / 253 | Оценка: 4.61 / 4.44 | Длительность: 27:18:00
ISBN: 978-5-9556-0051-2
Лекция 2:

Базовые понятия Action Script

Список встроенных типов

Применение оператора typeof

В некотором смысле понятие "встроенные типы Флэш МХ" не является хорошо определенным. Скажем, встроенный или не встроенный тип - компонент "выпадающий список" из библиотеки компонентов? Мы все же ограничимся наиболее четким из возможных определений, а именно: встроенными типами будем называть только те, для которых специальный оператор typeof выдает различные значения. Синтаксис использования оператора typeof следующий:

typeof <выражение>

Если вам больше нравится рассматривать typeof как функцию, то можно ставить скобки и писать

typeof (<выражение>)

Оператор этот выдает строчку, которая содержит название типа значения, возвращаемого переданным typeof выражением. Строчка при этом приводится к нижнему регистру, как показано в таблице 2.1. В таблице также указано, как воспринимаются объекты, которые пользователь может создавать "руками" - то есть клипы, кнопки и текстовые поля.

Видно, что из создаваемых визуально объектов только клипы оператор typeof "отличает особо". Что же касается собственно языка ActionScript, то для него разным (не сводимым к уникальному набору методов) поведением обладают лишь объекты типов Number, Boolean, String, Object, Function, undefined и null. Да еще Array имеет специальные операторы для конструирования. И только типы Number, Boolean, String, undefined и null бывают примитивными ("только для чтения").

Значения, возвращаемые typeof
Таблица 2.1. Приведение типа значения typeof
Тип typeof возвращает
Number number
Boolean boolean
String string
Object object
Function function
Array array
MovieClip movieclip
Button object
Text field object
undefined undefined
null null

Давайте теперь пронаблюдаем работу этого оператора на примерах. Пишем следующий код:

trace('typeof(5 + "") = ' + typeof(5 + ""));
trace('typeof(a) = ' + typeof(a));
a = new Object();
trace('typeof(a) = ' + typeof(a));
a = null;
trace('typeof(a) = ' + typeof(a));
a = {x: 20, y: "строчка"};
trace('typeof(a) = ' + typeof(a));
trace('typeof(a.x) = ' + typeof(a.x));
trace("typeof(String) = " + typeof(String));
trace("typeof(Function) = " + typeof(Function));
// Запись typeof(function) выдаст синтаксическую ошибку

На выходе получаем:

typeof(5 + "") = string
typeof(a) = undefined
typeof(a) = object
typeof(a) = null
typeof(a) = object
typeof(a.x) = number
typeof(String) = function
typeof(Function) = function

Все результаты, кроме двух последних, говорят сами за себя (заметим только, что мы уже не первый раз используем сложение чисел и строчек; подробнее о том, как это работает, будет написано в следующем параграфе, а детали работы со строчками разобраны в четвертой лекции). Последние же два результата явно требуют комментариев. Впрочем, с подробным объяснением нам придется подождать до шестой лекции, в которой пойдет речь о классах во Флэш МХ. Пока же нам следует сказать, что во Флэше конструктор класса хранит в себе ссылку на полную информацию об этом классе. И, таким образом, когда мы хотим иметь дело с классом, а не с объектом, мы должны иметь дело с конструктором. Так вот, String - это имя конструктора класса String, а Function - имя конструктора класса Function, к которому принадлежат все функции во Флэше.

Function - редкий случай case-sensitivity для идентификатора

И, раз уж мы заговорили о классе Function, самое время обратить внимание на интересный феномен. Вообще-то во Флэше всякое имя функции - это обычный идентификатор. Более того, мы вполне можем считать имя функции именем переменной, ссылающейся на объект-функцию (подробнее об этом будет рассказано в пятой лекции). А идентификаторы Флэш (в отличие от ключевых слов) являются нечувствительными к регистру ( case-insensitive ). То есть, хотя ключевые слова, как в C++ или Java, к регистру чувствительны ( case-sensitive ), одни и те же идентификаторы можно писать как заглавными буквами, так и строчными (или же вперемешку). Мы, конечно, надеемся, что в своих программах вы не допустите беспорядка и не будете пользоваться этим свойством Флэш. И тем более не будете заводить идентификаторы вроде NEW (хотя это и разрешается). Забавно, что сами создатели Флэш небольшой беспорядок все-таки допустили: существует идентификатор Function (имя конструктора объектов-функций), и в то же время существует ключевое слово function , которое как раз и позволяет новые функции создавать. Использовать это ключевое слово в том месте, где по смыслу требуется идентификатор Function, вы, разумеется, не сможете (об этом и говорит последняя строчка-комментарий в вышеприведенном коде).

Подсказки по объектам встроенных типов

Отсутствие строгой типизации во Флэш МХ порождает одну специфическую трудность. Современные программные среды очень дружественно относятся к пользователю, в частности, предоставляя ему возможность автопродолжения набранного текста. Самый распространенный (и, наверное, самый полезный) вариант этой возможности выглядит так: вы набираете имя переменной, среда опознает тип этой переменной, и когда вы вслед за именем ставите точку, вам тут же выдается список полей и методов этого типа. Остается лишь выбрать нужный. Это избавляет от необходимости помнить детали написания множества методов, и вообще очень удобно. Но как организовать аналогичную подсказку в том случае, когда строго определенного типа переменная не имеет и может хранить ссылку на какой угодно объект? В этом случае программист должен сам помочь среде Флэш МХ обеспечить ему необходимые удобства. А именно, если программист заранее знает, что в некоторой переменной будет храниться ссылка на объект какого-то определенного типа (так и бывает в большинстве случаев), он может дать этой переменной имя с одним из заранее определенных суффиксов. Такие переменные среда Флэш МХ будет узнавать, и выдаст вам подсказку. Все такие суффиксы начинаются с символа подчеркивания, так что и вам и среде будет легко их узнавать. Например, имя переменной a_str сообщает среде Флэш МХ о том, что в этой переменной, скорее всего, содержится ссылка на строку и подсказку по ней следует выдавать, соответствующую типу String. Вот список предопределенных суффиксов и соответствующих им типов приведен в таблице 2.2.

Таблица 2.2. Предопределенные суффиксы и соответствующие им типы
Тип Суффикс Примечание
Обыкновенные объекты
Array _array
Button _btn Стандартная кнопка (не компонент)
Color _color
Date _date
Sound _sound Именно объект типа Sound, а не просто звук, импортированный в клип
String _str
TextField _txt
TextFormat _fmt
XML _xml
XMLSocket _xmlsocket
Компоненты
FCheckBox _ch
FComboBox _cb Компонент "Выпадающий список"
FListBox _lb
FPushButton _pb Кнопка-компонент
FRadioButton _rb
FScrollBar _sb "Область с прокруткой" и (многострочные) текстовые поля.
FScrollPane _sp Компонент "Область с прокруткой"

Кроме этих суффиксов, Флэш МХ реагирует еще на несколько предопределенных имен, про которые ему заранее известно, что это объекты типа MovieClip. А именно, на _root (корневой клип данного флэш-ролика), _parent (в объектах типа MovieClip так называется поле, ссылающееся на родительский клип) и, наконец, на _level0, _level1, _level2 и т.д. (корневые клипы различных флэш-роликов, загруженных в плеер в настоящий момент). В лекции 12 мы расскажем вам о том, как самим делать подобные шаблоны, на которые реагирует среда разработки Флэш МХ.