Руководство по actionscript. часть 2, стр. 117
Синтаксические правила, применяемые к идентификаторам, не распространяются на переменные, которые создаются с использованием оператора [ ]. Например, следующий код создает динамическую переменную экземпляра, имя которой начинается с цифры:
var info:Object = new Object( ); info["411"] = «Information Line»;
Использование оператора «точка» (.) для создания той же переменной вызовет ошибку, поскольку такая запись нарушает синтаксические правила, применяемые к идентификаторам:
var info.-Object = new Object ( );
info.411 = «Information Line»; // ОШИБКА! Идентификаторы не должны
// начинаться с цифры
Стоит отметить, что описанная методика может использоваться для обращения не только к динамическим переменным экземпляра, но и к любым типам переменных и методов. Однако наиболее часто она применяется при работе именно с динамическими переменными экземпляра. Следующий раздел демонстрирует использование динамических обращений в практической ситуации: для создания справочной таблицы.
Использование динамических переменных экземпляра для создания справочных таблиц
Справочная таблица — это структура данных, которая связывает набор имен с соответствующим набором значений. Например, следующий псевдокод демонстрирует справочную таблицу, которая представляет меню (приводится по-русски):
закуска: маисовые чипсы
основное блюдо: лепешка с начинкой из бобов
десерт: пирожное
Чтобы представить данную справочную таблицу с помощью динамических переменных экземпляра, можно использовать следующий код:
var meal:0bject = new Object( ); meal. appetizer = «tortilla chips»; meal. maincourse = «bean burrito»; meal. dessert = «cake»;
Теперь рассмотрим более сложный сценарий. Представьте приложение для инвентаризации книг в книжном магазине, которое позволяет пользователю искать книги по номеру ISBN. Информация о каждой книге загружается с внешнего сервера. Чтобы минимизировать количество обращений к серверу, приложение загружает за раз информацию о 500 книгах. Для упрощения будем полагать, что информация о каждой книге представлена в виде отдельной строки, имеющей следующий формат:
«Price: $19.99. Title: Path of the Paddle»
Для хранения загруженной информации о книге в программе на языке ActionScript создадим экземпляр класса Ob j ect, который будет служить справочной таблицей для книг:
var bookList:Object = new 0bject( ):
Загруженную информацию о каждой книге мы присваиваем новой динамической переменной экземпляра созданного объекта bookList. Имя каждой переменной соответствует ISBN-номеру книги с предшествующей строкой «isbn». Например, переменная для книги с ISBN-номером 155209328Х будет называться isbnl5520 932 8X. Следующий код демонстрирует создание динамической переменной экземпляра для данной книги в том случае, если бы мы заранее знали ее ISBN-номер:
bookList. isbnl55209328X = «Price: $19.95. Title: Path of the Paddle»;
В реальном приложении тем не менее ISBN-номер книги станет известен только после того, как информация об этой книге будет загружена с сервера. Следовательно, имя динамической переменной экземпляра для каждой книги должно формироваться динамически, на основании загружаемых данных. Для демонстрационных целей создадим переменную bookDatа, значение которой будет представлять данные в том виде, в котором они были бы загружены с сервера. В этом упрощенном примере ISBN-номер и подробная информация о каждой книге разделяются одиночным символом «тильда» (-). При этом полная информация о каждой книге отделяется двойным символом «тильда»
var bookData:String = «155209328X~Price: $19.95. Title: Path of the Paddle» + «—»
+ «0072231726-Price: $24.95. Title: High Score!»;
Чтобы преобразовать загруженные данные о книгах из строки в массив книг для обработки, воспользуемся методом split ( ) класса String, как показано в следующем коде:
var bookDataArray. Array = bookData. split(«—»):
Для преобразования массива книг в справочную таблицу используем следующий код:
// Создаем переменную, которая будет хранить информацию о каждой книге // в процессе обработки var book:Array;
// Выполнить цикл один раз для каждого элемента в массиве книг for (var i:int = 0; i < bookdataarray.length; i++) {
// Преобразуем текущий элемент массива из строки в собственный массив. // Например, строка:
// «155209328X~Price: $19.95. Title: Path of the Paddle» // становится массивом:
// ["155209328X", "Price: $19.95. Title: Path of the Paddle"] book = bookDataArray[i].split(«~»);
// Создаем динамическую переменную экземпляра, имя которой соответствует
// ISBN-номеру текущего элемента в массиве книг, и присваиваем этой
// переменной описание текущего элемента в массиве. Обратите внимание, что
// ISBN-номер представлен выражением book[0], а описание -
// выражением Ьоок[1].