Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008 |
Контейнеры
Во Флэш МХ имеется встроенная библиотечка объектов-контейнеров. Обычно в библиотеках контейнеров (такой, например, как стандартная библиотека С++) можно найти контейнеры, оптимизированные для всех случаев жизни - по скорости выполнения самых разных операций, по занимаемой памяти и пр. Создатели Флэша поступили проще: они, резонно полагая, что главная оптимизация состоит в использовании заранее скомпилированного компонента, предлагают нам для большинства задач один универсальный контейнер. Это класс Array. Однако, судя по названию, основной его задачей является играть роль массива, поэтому посмотрим, как он с этой задачей справляется.
Массив: различные способы создания
Сейчас мы рассмотрим все способы создания массива, причем начнем с устаревших, а закончим самыми совершенными и удобными.
Эмуляция массива
Во Флэше версии 4 настоящих массивов не было и выкручиваться приходилось примерно так:
for (var i=0; i<5; i++) set("a" + i, 5*i + 1); // Обращаемся к конкретному элементу trace("a2 = " + a2); i = 4; // Обращаемся по номеру, записанному в переменной trace("a" + i + " = " + eval("a" + i));
Выводит этот код (который, правда, напрямую перенести во Флэш 4 нельзя - мы хотя и не использовали массивы, но зато применили ряд других вещей, которых в четвертой версии Флэша не было) следующие строчки:
a2 = 11 a4 = 21
Во Флэш МХ делать подобные вещи смысла не имеет. (Хотя генерация серий имен, бывает, применяется при создании наборов похожих клипов.) Гораздо лучше пользоваться встроенным объектом типа Array.
Создание массива с помощью new
Создать объект типа Array можно, например, так (на выбор целых три способа):
a_array = new Array(2,3,"AAA",4,8); b_array = new Array(10); c_array = new Array(); // Обращаемся к конкретному элементу trace("a_array[1] = " + a_array[1]); i = 3; // Обращаемся по номеру, записанному в переменной trace("a_array[" + i + "] = " + a_array[i]); c_array[7] = 9; // Длину массива можно узнать, обратившись к специальному // свойству length trace("a_array.length = " + a_array.length); trace("b_array.length = " + b_array.length); trace("c_array.length = " + c_array.length);
Выводит этот код следующее:
a_array[1] = 3 a_array[3] = 4 a_array.length = 5 b_array.length = 10 c_array.length = 8
Посмотрим также, какие переменные заведены в программе (надо после запуска на исполнение нажать Ctrl+Alt+V ). Получим:
Level #0: Variable _level0.$version = "WIN 6,0,21,0" Variable _level0.a_array = [object #1, class 'Array'] [ 0:2, 1:3, 2:"AAA", 3:4, 4:8 ] Variable _level0.b_array = [object #2, class 'Array'] [] Variable _level0.c_array = [object #3, class 'Array'] [ 7:9 ] Variable _level0.i = 3
Итак, с точки зрения С++ или Java класс Array имеет три разных конструктора. Один из них - тот, в который передается больше одного аргумента - создает массив из всех аргументов, переданных в конструктор. Второй - с одним числовым аргументом - создает массив указанной длины, хотя и незаполненный. Наконец, третий, вовсе без аргументов, просто создает массив с нужным именем. Длина его первоначально нулевая. Однако, если мы попытаемся записать что-либо в ячейку массива, которая еще не создана, массив немедленно расширится до нужного размера.
Заодно, на этих примерах мы убедились, что во Флэш МХ, как и в C++ и Java, массивы нумеруются с нуля.
Обратите внимание, что в названии наших массивов мы используем суффикс _array. Это позволяет нам пользоваться контекстной подсказкой: сразу после постановки точки вслед за именем переменной с таким суффиксом на экране появится всплывающее меню, из которого мы сможем выбрать нужный метод (или поле) класса Array.