Руководство по actionscript. часть 2, стр. 014

Serializable

Абстрактное

описание типа данных

—Г»

Реализует

Интерфейс I I Класс

Реализует

Serializer

Реализация типа данных

1 г

Расширяет Сохраняет

Point

Serializer используется через наследование

Shape

Несвязанный класс

Расширяет

Rectangle

Serializer используется через композицию

>Экземпляр Serializer

Рис. 9.2. Множественное наследование типов данных на примере интерфейса Serializable

Впереди еще много важного

Познакомившись с классами, объектами, наследованием, типами данных и интерфейсами, мы завершили изучение базовых концепций объектно-ориентированного программирования. До конца части I мы рассмотрим еще несколько других фундаментальных тем, касающихся языка ActionScript. Однако изученные концепции объектно-ориентированного программирования не останутся невостребованными, поскольку они являются основой языка ActionScript.

Руководство по actionscript. часть 2, стр. 015

В следующей главе рассматриваются инструкции и операторы языка ActionScript.

ГЛАВАМ

Инструкции и операторы

В этой главе приводится краткое, организованное в виде справочника, описание инструкций и операторов языка ActionScript, со многими из которых вы уже встречались в данной книге. Вместо того чтобы рассматривать каждую инструкцию и оператор по отдельности, эта книга обучает использованию инструкций и операторов в контексте других тем по программированию. Таким образом, глава содержит множество перекрестных ссылок на соответствующие разделы и примеры, разбросанные по всей книге. Информацию по операторам, которые не рассматриваются в данной книге, можно найти в справочнике по языку ActionScript корпорации Adobe.

Инструкции

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

В табл. 10.1 перечислены инструкции языка ActionScript, их синтаксис и назначение.

Таблица 10.1. Инструкции языка ActionScript

Инструкция Использование Описание

break break Завершает цикл или инструкцию switch. Подробную информацию можно найти в гл. 2

case case выражение: вложенные_инструкции Обозначает инструкцию, выполняемую по условию в инструкции switch. Подробную информацию можно найти в гл. 2

continue continue; Пропускает оставшиеся инструкции в текущем цикле и начинает новую итерацию с начала цикла. За дополнительной информацией обратитесь к документации от корпорации Adobe

default default: вложен н ые_и нстру кци и Обозначает инструкцию (-и), выполняемую (-ые) инструкцией switch, когда результат условного выражения не соответствует ни одному из значений выражений case. Дополнительную информацию можно найти в гл. 2

do-while do{ вл ожен н ые_и нстру кци и } while (выражение) Разновидность цикла while, гарантирующая, что тело цикла будет выполнено по крайней мере один раз. Дополнительную информацию можно найти в гл. 2

for for (инициализация; условноеВыражение; корректирование) { инструкции } Многократно выполняет блок инструкций (цикл for). Синоним цикла while, однако выражения инициализации и корректирования цикла размещаются вместе с условным выражением в верхней части цикла. Дополнительную информацию можно найти в гл. 2

Таблица 10.1 (продолжение)

Инструкция Использование Описание

for-in for (переменная in объект) { инструкции } Перечисляет имена динамических переменных экземпляра или элементы массива. Дополнительную информацию можно найти в гл. 15

for-each-in for each (переменная-ИлиЗначениеЭлемента in объект) { инструкции } Перечисляет значения динамических переменных экземпляра или элементы массива. Дополнительную информацию можно найти в гл. 15

if-else if-else if (выражение) { вложен ные_и нстру кци и } else if (выражение) { вложенные_инструкции } else { вложен н ые_и нстру кци и } Выполняет одну или несколько инструкций в зависимости от условия или ряда условий. Дополнительную информацию можно найти в гл. 2

label label: инструкция label: инструкции Связывает инструкцию с идентификатором. Применяется вместе с инструкциями break или continue. За дополнительной информацией обратитесь к документации от корпорации Adobe

return return; return выражение; Выход из функции, при этом может возвращаться значение. Дополнительную информацию можно найти в гл. 5

super super(apryMeHTl, аргу-мент2… аргументп) super. метод(аргумент1, аргумент2… аргументп) Вызывает метод конструктора суперкласса или перекрытый метод экземпляра. Дополнительную информацию можно найти в гл. 6

switch switch (выражение) { вложенные инструкции } Выполняет указанный код в зависимости от условия или ряда условий (является альтернативой инструкции if-else if-else). Дополнительную информацию можно найти в гл. 2

throw throw выражение Генерирует исключение (ошибку) на этапе выполнения. Дополнительную информацию можно найти в гл. 13

try/catch/ finally try { // код, который может // сгенерировать // исключение } catch (еггопТипОшиб-КИ1){ // Код обработчика // ошибки типа // Тип0шибки1 } catch (еггопТипОшиб-ки1Ч){ // Код обработчика // ошибки типа // Тип0шибки1М } finally { // Код, который // выполняется всегда } Окружает блок кода для реакции на возможные исключения, возникающие на этапе выполнения. Дополнительную информацию можно найти в гл. 13

Инструкция Использование Описание

while while (выражение) { вложенные_инструкции } Многократно выполняет блок инструкций (цикл while). Дополнительную информацию можно найти в гл. 2

with with (объект) { вложенные инструкции } Выполняет блок инструкций в контексте данного объекта. Дополнительную информацию можно найти в гл. 16

Операторы

Оператор — это символ или ключевое слово, предназначенные для управления, объединения или преобразования данных. Например, следующий код использует оператор умножения (*), чтобы умножить число 5 на число 6:

5 * 6;

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

Руководство по actionscript. часть 2, стр. 016

Операторы выполняют действия над указанными значениями данных (операндами). Например, в операции 5*6 числа 5 и 6 являются операндами оператора умножения (*).

Отдельные операции могут быть объединены в одно сложное выражение. Например:

((width * height) — (Math. PI * radius * radius)) / 2

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

var radius:int = 10; var height:int = 25;

var circleArea:Number = (Math. PI * radius * radius); var cylinderVolume:Number = circleArea * height;

Количество операндов

Операторы иногда классифицируют по количеству принимаемых операндов (то есть требуемых для выполнения операции). Некоторые операторы языка ActionScript принимают один операнд, некоторые — два, а один оператор принимает даже три операнда:

-х // Один операнд

х * у // Два операнда

(х == у) ? «true result» : «false result» // Три операнда

Операторы, принимающие один операнд, называются унарными’, операторы, принимающие два операнда, называются бинарными’, операторы, принимающие три операнда, называются тернарными. Для наших целей мы будем рассматривать операторы с точки зрения выполняемых ими действий, а не с точки зрения количества принимаемых операндов.

Приоритет операторов

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

4 + 5*6 // Возвращает 34, поскольку 4 + 30 = 34

Выражение 4 + 5*6 вычисляется, как «4 плюс произведение 5 и 6», поскольку оператор * имеет более высокий приоритет, чем оператор +.

Руководство по actionscript. часть 2, стр. 017

Подобным образом, если в одном выражении встречаются оператор «меньше чем» (<) и оператор конкатенации (+), операция конкатенации будет выполнена первой. предположим, мы хотим сравнить две строки и отобразить результат сравнения при отладке программы. не зная приоритетов операторов < и +, мы можем по ошибке использовать следующий код:

traceCresult: » + «а» < "b");

Из-за приоритетов операторов < и + код выдаст значение f al se, хотя мы ожидали увидеть несколько иной результат:

result: true

Чтобы определить результат выражения «result: » + «а» < "ь", среда flash сначала выполнит операцию конкатенации (поскольку оператор + обладает более высоким приоритетом, чем <). результатом конкатенации строки "result: " со строкой " а " является новая строка "result: а ". после этого среда выполнения flash сравнивает полученную строку со строкой "ь" и получает значение false, поскольку первый символ строки "result: а" находится дальше по алфавиту, чем символ "ь".

Если вы сомневаетесь в приоритетах используемых операторов или хотите указать другую последовательность выполнения операций, используйте круглые скобки, которые обладают самым высоким приоритетом:

«result: » + («а» < "b") // возвращает: "result: true"

(4 + 5) * 6 // Возвращает 54, поскольку 9 * 6 = 54

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

х > У || У == z // х больше у или у равняется z

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

(х > у) || (у == z) // Гораздо лучше!

Ассоциативность операторов

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

b * с / d

Операторы * и / обладают левой ассоциативностью, поэтому операция умножения слева (Ь * с) выполняется первой. Предыдущий пример эквивалентен следующему выражению:

(Ь * с) / d

Здесь оператор = (оператор присваивания) обладает правой ассоциативностью, поэтому выражение

а = b = с = d

читается, как «присвоить значение d переменной с, затем присвоить значение с переменной Ь, после чего присвоить значение b переменной а», как показано в следующем примере:

а = (Ь = (с = d))

Унарные операторы обладают правой ассоциативностью; бинарные операторы обладают левой ассоциативностью, за исключением операторов присваивания, обладающих правой ассоциативностью. Условный оператор ( ? :) также обладает правой ассоциативностью. Ассоциативность операторов достаточно понятна на интуитивном уровне, но если сложное выражение вернуло неожидаемое значение, воспользуйтесь дополнительными круглыми скобками, чтобы указать желаемый порядок выполнения операций. Более подробную информацию по ассоциативности операторов в языке ActionScript можно найти в документации от корпорации Adobe.

Руководство по actionscript. часть 2, стр. 018

Типы данных и операторы

Операнды большинства операторов являются типизированными. В строгом режиме, если значение, используемое в качестве операнда, не соответствует типу данных данного операнда, компилятор сгенерирует ошибку на этапе компиляции и прекратит компиляцию кода. В стандартном режиме код будет скомпилирован и на этапе выполнения программы. Если тип операнда является примитивным, среда выполнения Flash преобразует значение к типу данных этого операнда (в соответствии с правилами, описанными в разд. «Преобразование в примитивные типы» гл. 8). Если тип операнда не является примитивным, то среда Flash сгенерирует ошибку на этапе выполнения.

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

деления (/) является Number, а значение «50″ не принадлежит типу данных Number:

«50″ / 10

При компиляции программы в стандартном режиме предыдущий код не вызовет ошибку на этапе компиляции. Вместо этого на этапе выполнения программы среда Flash преобразует значение «50м типа String к типу данных Number, получив в результате значение 50, и указанное выражение вернет значение 5.

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

Number(«50″) / 10

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

Типы данных операндов всех операторов описаны в справочнике по языку ActionScript корпорации Adobe.

Обзор операторов

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

Стоит отметить, что книга не содержит исчерпывающей информации об операторах языка ActionScript, за исключением операторов, описанных в спецификации Е4Х. Дополнительную информацию о каждом конкретном операторе можно найти в справочнике по языку ActionScript корпорации Adobe. Побитовые операторы описаны в статье « Using Bitwise Operators in ActionScript», находящейся по адресу http://www. moock. org/asdg/technotes/bitwise.

Руководство по actionscript. часть 2, стр. 019

Таблица 10.2. Операторы языка ActionScript

Оператор Приоритет Описание Пример

15 Многоцелевое использование. 1. Обращается к переменной или методу. 2. Отделяет имена пакетов от имен классов и других пакетов. 3. Обращается к дочерним элементам объекта XML или XMLList (спецификация Е4Х) 1. Обращение к переменной: product, price 2. Ссылка на класс: flash. d isplay. Sprite 3. Обращение к дочернему элементу объекта XML: novel. TITLE

Оператор Приоритет Описание Пример

[] 15 Многоцелевое использование. 1. Выполняет инициализацию массива. 2. Обращается к элементу массива. 3. Обращается к переменной или методу с использованием любого выражения, возвращающего строку. 4. Обращается к дочерним элементам или атрибутам объекта XML или XMLList (спецификация Е4Х) 1. Инициализация массива: ["apple", "orange", "pear"] 2. Обращение к четвертому элементу массива: list[3] 3. Обращение к переменной: product["price"] 4. Обращение к дочернему элементу объекта XML: novel["TITLE"]

О 15 Многоцелевое использование. 1. Задает особый порядок выполнения операций (приоритет). 2. Вызывает функцию или метод. 3. Содержит фильтрующий предикат спецификации Е4Х 1. Выполнение операции сложения до операции умножения: (5 + 4) * 2 2. Вызов функции: trace() 3. Фильтрация объекта XMLList: staff.*.(SALARY <= 35000)

@ 15 Обращается к атрибутам XML-элемента Получение всех атрибутов элемента novel: novel. @*

15 Отделяет уточняющее пространство имен от имени Уточнение имени orange в пространстве имен fruit: fruit:: orange

15 Обращается к потомкам XML-элемента Получение всех элементов-потомков элемента loan с именем DIRECTOR: loan..DIRECTOR

{х:у} 15 Создает новый объект и инициализирует его динамические переменные Создание объекта с динамическими переменными width и height: {width:30, height:5>

new 15 Создает экземпляр класса Создание экземпляра класса TextField: new TextField()

15 Описывает XML-элемент Создание XML-элемента с именем BOOK: Essential ActionScript 3.0

Х++ 14 Прибавляет единицу к значению переменной х и возвращает ее прежнее значение (постфиксный инкремент) Увеличение i на 1 и возврат прежнего значения i: i++

х— 14 Вычитает единицу из значения переменной х и возвращает ее прежнее значение (постфиксный декремент) Уменьшение i на 1 и возврат прежнего значения i:

++Х 14 Прибавляет единицу к значению переменной х и возвращает ее новое значение (префиксный инкремент) Увеличение i на 1 и возврат результата: ++i

Таблица 10.2 (продолжение)

Оператор Приоритет Описание Пример

—X 14 Вычитает единицу из значения переменной х и возвращает ее новое значение (префиксный декремент) Уменьшение i на 1 и возврат результата:

14 Изменяет знак операнда (положительное значение становится отрицательным, а отрицательное — положительным) var a:int = 10; Присвоение -10 переменной Ь: var b:int = — а;

14 Выполняет операцию побитового НЕ Сброс бита 2 значения переменной options: options &= ~4;

14 Возвращает логическое значение, противоположное его единственному операнду Если значением переменной underl8 не является true, то выполняется тело условного оператора: if (!underl8){ trace(«You can apply for a credit card») }

delete 14 Многоцелевое использование. 1. Удаляет значение элемента массива. 2. Удаляет динамическую переменную экземпляра объекта. 3. Удаляет XML-элемент или атрибут 1. Создание массива: var genders:Array = ["male","female"] 2. Удаление значения первого элемента: delete genders[0]; 3. Создание объекта: var о:Object = new Object(); o. a = 10; 4. Удаление динамической переменной экземпляра а: delete o. a; 5. Удаление элемента из объекта XML, на который ссылается переменная novel: delete novel. TITLE;

typeof 14 Возвращает простое строковое описание различных типов объектов. Используется только для обеспечения обратной совместимости с языками ActionScript 1.0 и ActionScript 2.0 Получение строкового описания типа значения 35: typeof 35

void 14 Возвращает значение undefined var о:Object = new Object(); o. a = 10; Сравнение значения undefined со значением o. a: if (o. a == void) { trace(«o. a does not exist, or has no value»); }

* 13 Перемножает два числа Умножение 4 на 6: 4*6

/ 13 Делит левый операнд на правый операнд Деление 30 на 5: 30/5

Оператор Приоритет Описание Пример

% 13 Возвращает остаток (то есть модуль) от деления левого операнда на правый операнд Остаток от деления 14 на 4: 14 % 4

+ 12 Многоцелевое использование. 1. Складывает два числа. 2. Объединяет (конкатенирует) две строки. 3. Объединяет (конкатенирует) два объекта XML или XMLList 1. Результат 25 плюс 10: 25 + 10 2. Объединение строк «Не» и «Но» в строку «Hello»: «Не» + «Но» 3. Объединение двух объектов XML: Programmer + 52

- 12 Вычитает правый операнд из левого операнда Вычитание 2 из 12: 12-2

<< 11 выполняет побитовый сдвиг влево сдвигает значение 9 на четыре бита влево: 9 << 4

>> 11 Выполняет побитовый знаковый сдвиг вправо Сдвигает значение 8 на один бит вправо: 8 » 1

>>> 11 Выполняет побитовый беззнаковый сдвиг вправо Сдвигает значение 8 на один бит вправо, заполняя освободившиеся биты нулями: 8 »> 1

< 10 проверяет справедливость условия, что левый операнд меньше правого. в зависимости от значений операндов возвращает true или false 1. проверяет справедливость условия, что 5 меньше 6: 5 < 6 2. проверяет, обладает ли символ "а" более низкой кодовой позицией, чем символ "z": "а" < "z"

<= 10 проверяет справедливость условия, что левый операнд меньше либо равен правому операнду. в зависимости от значений операндов возвращает true или false 1. проверяет справедливость условия, что 10 меньше либо равно 5: 10 <= 5 2. проверяет, обладает ли символ "с" более низкой или такой же кодовой позицией, что и символ "d": "с" <= "d"

> 10 Проверяет справедливость условия, что левый операнд больше правого. В зависимости от значений операндов возвращает true или false 1. Проверяет справедливость условия, что 5 больше 6: 5 > 6 2. Проверяет, обладает ли символ «а» более высокой кодовой позицией, чем символ «z»: «а» > «z»

>= 10 Проверяет справедливость условия, что левый операнд больше либо равен правому операнду. В зависимости от значений операндов возвращает true или false 1. Проверяет справедливость условия, что 10 больше либо равно 5: 10 >= 5 2. Проверяет, обладает ли символ «С» более высокой или такой же кодовой позицией, что и символ «D»: «С» >= «D»

Таблица 10.2 (продолжение)

Оператор Приоритет Описание Пример

as Проверяет, принадлежит ли левый операнд типу данных, указанному правым операндом. Если это так, возвращается объект; в противном случае возвращается значение null Var d:Date = new Date() Проверяет, принадлежит ли значение переменной d типу данных Date: d as Date

is Проверяет, принадлежит ли левый операнд типу данных, указанному правым операндом. Если это так, возвращается true; в противном случае возвращается false var a:Array = new Array() Проверяет, принадлежит ли значение переменной а типу данных Array: a is Array

in Проверяет, обладает ли объект указанной открытой переменной или методом экземпляра Var d:Date = new Date() Проверяет, обладает ли значение переменной d открытой переменной или открытым методом с именем getMonth: «getMonth» in d

instanceof 10 Проверяет, включает ли цепочка прототипов левого операнда правый операнд. В зависимости от значений операндов возвращает true или false var s:Sprite = new Sprite() Проверяет, включает ли цепочка прототипов значения переменной s объект DisplayObject: s instanceof DisplayObject

9 Проверяет, являются ли два выражения равными (условие равенства). В зависимости от значений операндов возвращает true или false Проверяет, равняется ли выражение «hi» выражению «hello»: «hi» == «hello»

9 Проверяет, являются ли два выражения неравными (условие неравенства). В зависимости от значений операндов возвращает true или false Проверяет, не равно ли выражение 3 выражению 3: 3 != 3

9 Проверяет, являются ли два выражения равными, не выполняя преобразование типов данных операндов к примитивным типам (условие строгого равенства). В зависимости от значений операндов возвращает true или false Проверяет, равняется ли выражение «3″ выражению 3. Этот код компилируется только в стандартном режиме: »3″ ===з

9 Проверяет, являются ли два выражения неравными, не выполняя преобразование типов данных операндов к примитивным типам (условие строгого неравенства). В зависимости от значений операндов возвращает true или false Проверяет, не равно ли выражение «3″ выражению 3. Этот код компилируется только в стандартном режиме: «3″ !== 3

& 8 Выполняет операцию побитового И Объединяет биты значений 15 и 4 с помощью операции побитового И: 15 & 4

Оператор Приоритет Описание Пример

л 7 Выполняет операцию побитового исключающего ИЛИ Объединяет биты значений 15 и 4 с помощью операции побитового исключающего ИЛИ: 15 А 4

1 6 Выполняет операцию побитового ИЛИ Объединяет биты значений 15 и 4 с помощью операции побитового ИЛИ: 15 | 4

&& 5 Сравнивает результаты двух выражений с помощью операции логического И. Если значение левого операнда равно false или преобразуется в false, оператор возвращает левый операнд; в противном случае оператор возвращает правый операнд var validUser: Boolean = true; var validPassword: Boolean = false; Проверяет, имеют ли обе переменные — validUser и validPassword — значение true: if (validUser && validPassword) { // Выполнить вход… }

II 4 Сравнивает результаты двух выражений с помощью операции логического ИЛИ. Если значение левого операнда равно true или преобразуется в true, оператор возвращает левый операнд; в противном случае оператор возвращает правый операнд var promotionalDay: Boolean = false; var registeredUser:Boolean = false; Проверяет, чтобы значение любой из переменных promotionalDay или registeredUser равнялось true if (promotionalDay 11 registeredUser) { // Отобразить дополнительное содержимое… }

?: 3 Выполняет простое условие. Если значение первого операнда равно true или преобразуется в true, вычисляется и возвращается значение второго операнда. В противном случае вычисляется и возвращается значение третьего операнда Вызывает один из двух методов в зависимости от того, хранит ли переменная soundMuted значение true: soundMuted? displayVisualAlarm() : playAudioAlarm()

2 Присваивает значение переменной или элементу массива 1. Присваивает 36 переменной age: var ageiint = 36; 2. Присваивает новый массив переменной seasons: var seasons:Array = new Array(); 3. Присваивает значение «winter» первому элементу массива seasons: seasons[0] = «winter»;

+= 2 Прибавляет (или конкатенирует) и присваивает результат 1. Прибавляет 10 к значению переменной п: п += 10; // то же самое, что и n = п + 10; 2. Добавляет восклицательный знак в конец строки msg: msg += «I» 3. Добавляет тег после первого тега потомка объекта novel: novel. AUTHOR[0] += Dave Luxton;

Таблица 10.2 (иродо. мачте)

Оператор Приоритет Описание Пример

2 Вычитает и присваивает результат Вычитает 10 из значения переменной п: п -= 10; // то же, что и n = п — 10;

*- 2 Умножает и присваивает результат Умножает значение переменной п на 10: п *= 10; // то же, что и n = п * 10;

/= 2 Делит и присваивает результат Делит значение переменной п на 10: п /= 10; // то же, что и n = п / 10;

%= 2 Выполняет операцию деления по модулю и присваивает результат Присваивает переменной п результат операции п % 4: п %= 4; // то же, что и n = п % 4;

<<= 2 сдвигает биты влево и присваивает результат сдвигает биты значения переменной п влево на две позиции: п <<= 2; // то же, что и n = п << 2;

>>= 2 Сдвигает биты вправо и присваивает результат Сдвигает биты значения переменной п вправо на две позиции: п >>= 2; // то же, что и n = п >> 2;

>>>= 2 Сдвигает биты вправо (беззнаковый сдвиг)и присваивает результат Сдвигает биты значения переменной п вправо на две позиции, заполняя освободившиеся биты нулями: п »>= 2; // то же, что и n = п >>> 2;

&= 2 Выполняет операцию побитового И и присваивает результат Объединяет биты значения переменной п со значением 4, используя операцию побитового И: п &= 4 // то же, что и n = п & 4;

А — 2 Выполняет операцию побитового исключающего ИЛИ и присваивает результат Объединяет биты значения переменной п со значением 4, используя операцию побитового исключающего ИЛИ: п А= 4 // то же, что и n = n А 4;

1 = 2 Выполняет операцию побитового ИЛИ и присваивает результат Объединяет биты значения переменной п со значением 4, используя операцию побитового ИЛИ: п | = 4 // то же, что и n = п | 4;

1 Вычисляет сначала значение левого операнда, а затем правого Инициализация и увеличение двух итераторов цикла: for (var i:int = 0, j:int = 10; i < 5; j++h // i принимает значения от 0 до 4 // j принимает значения от 10 до 14 }

Далее: управление списками данных

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

Руководство по actionscript. часть 2, стр. 020

ГЛАВА 11

Массивы

Массивы хранят упорядоченные списки данных и управляют ими, являясь, таким образом, основным инструментом в последовательном, итерационном программировании. Мы используем массивы для решения различных надач, начиная с храпения данных, введенных пользователем, и заканчивая генерацией раскрывающихся меню или описанием траектории движения вражеского космического корабля в игре. Фактически массив — это просто список элементов, похожий па список продуктов или на записи в вашей книге расходов. Только элементами в данном случае являются значения языка ActionScript.

Что такое массив?

Массив — это структура данных, которая объединяет несколько отдельных значений данных в упорядоченный список. Рассмотрим простой пример, который демонстрирует две отдельные строки и массив, содержащий две строки:

«cherries» // Отдельная строка

«peaches» // Еще одна строка

["oranges", "apples"] // Массив, содержащий две строки

Массив может содержать любое количество элементов, причем различных типов. Массив даже может содержать другие массивы. Рассмотрим простой пример, демонстрирующий массив, который одновременно содержит и строки, и числа. Используя массив, можно представить список покупок, включающий названия покупаемых товаров и их необходимое количество: ["oranges". 6, "apples". 4, "bananas", 3];

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

// Присвоить массив переменной var product:Array = ["ladies downhill skis", 475]; // Передать этот массив в функцию display(product);

Анатомия массива

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

Руководство по actionscript. часть 2, стр. 021

Элементы массива

Каждому элементу массива, как и переменной, можно присвоить любое значение. Таким образом, весь массив похож на совокупность последовательно именованных переменных, но вместо уникального имени каждый элемент обладает номером (номером первого элемента является 0, а не 1). Для работы с соответствующими значениями мы обращаемся к элементам массива по их номеру.

Индексация элементов массива

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

Кроме того, существует возможность добавлять и удалять элементы в начале, конце и даже в середине массива. Массив может иметь промежутки (то есть некоторые элементы могут быть незаполненными). Элементы могут размещаться в позициях 0 и 4, при этом совсем не обязательно, чтобы элементы присутствовали в позициях 1, 2 и 3. Массивы с промежутками называются разреженными массивами.

Размер массива

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

Создание массивов

Для создания нового массива применяется литерал массива или оператор new (то есть new Array ( ) ).

Массивы в других языках программирования. Практически каждый язык программирования высокого уровня поддерживает массивы или похожие на них конструкции. При этом в способах реализации массивов в разных языках есть различия. Например, многие языки не позволяют хранить в массиве данные разных типов. Во многих языках массив может содержать либо числа, либо строки, но хранить в одном массиве значения обоих типов не допускается. Интересно, что в языке С отсутствует примитивный тип данных string. Вместо этого поддерживается односимвольный тип данных char; строки считаются составным типом данных и реализуются в виде массива, состоящего из элементов типа char.

В языке ActionScript размер массива изменяется автоматически при добавлении или удалении элементов. Во многих языках размер массива должен быть указан при первом объявлении, или задании размерности, массива (то есть в тот момент, когда выделяется память для хранения данных массива).

Языки различаются и по тому, что происходит при попытке обращения к элементу, находящемуся за границами (пределами) массива. Если программа попытается присвоить значение элементу, находящемуся за пределами существующих границ массива, язык ActionScript добавит недостающие элементы. Если программа попытается обратиться к элементу, индекс которого лежит за пределами границ массива, то язык ActionScript вернет значение undefined, тогда как язык С, например, не обратит никакого внимания на допустимость указанного номера элемента. Язык программирования С позволяет программе получать и присваивать значения элементам, находящимся за пределами границ массива, что обычно приводит к получению бессмысленных данных, не являющихся частью массива, или к перезаписыванию других данных в памяти.

Создание массивов с помощью литералов

Литерал массива состоит из квадратных скобок, обозначающих начало и конец массива, и элементов, которые перечисляются через запятую внутри квадратных скобок. Вот его обобщенный синтаксис:

[выражение1, выражение2, выражениеЗ]

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

Руководство по actionscript. часть 2, стр. 022

Рассмотрим несколько примеров:

// Простые числовые элементы [4, 5. 63]:

// Простые строковые элементы ["apple", "orange", "pear"]

// Числовые выражения с операцией [1. 4, 6 + 10]

// В качестве элементов выступают значения переменных и строки [firstName, lastName, "tall", "skinny"]

// Вложенный литерал массива ["month end days", [31, 30, 28]]

Создание массивов с помощью оператора new

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

new Array(аргументы)

Результат выполнения этого кода зависит от количества и типа аргументов, передаваемых в конструктор класса Array. Если в конструктор передается несколько

аргументов или один нечисловой, то каждый аргумент становится значением отдельного — момента в новом массиве. Например, следующий код создаст массив с тремя элемс-нтами:

new Array(«sun», «moon», «earth»)

Если в конструктор класса Array передается один числовой аргумент, то будет создан масс и в с указанным количеством незаполненных элементов, значения которым могут быть присвоены позднее (создание подобного массива с помощью литерала оказалось бы достаточно утомительным занятием). Например, следующий код создает массив, состоящий из 14 незаполненных элементов:

new Array(14)

Аргументами, передаваемыми в конструктор класса Array, могут быть любые допустимые выражения, включая составные выражения. Например, следующий код создает массив, первым элементом которого является число 11, а вторым элементом — число 50:

var х:int = 10: var y:int = 5:

var numbers:Array = new Array(x +1, x * y);

Для прямого сравнения следующий код создает массивы из предыдущего раздела, однако вместо литералов массива используется оператор new:

new Array(4. 5. 63)

new Array(«apple». «orange», «pear»)

new Arrayd. 4, 6 + 10)

new Array(firstName. lastName. «tall», «skinny») new Array(«month end days», new Array(31. 30. 28))

Обращение к элементам массива

После создания массива мы, разумеется, захотим получать или изменять значения его элементов. Для этих целей применяется оператор доступа к массиву — [ ].

Руководство по actionscript. часть 2, стр. 023

Получение значения элемента

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

массив[номерЭлемента]

В предыдущем коде массив обозначает ссылку на массив (обычно это переменная, значением которой является массив), а номерЭлемента — это целое число, определяющее индекс элемента. Номером первого элемента является 0, а номер последнего элемента на единицу меньше длины массива. Если указанный номер элемента превышает последний допустимый номер элемента, среда выполнения Flash вернет значение undefined (поскольку указанный индекс находится за пределами границ массива).

Попробуем получить несколько значений элементов. Следующий код создает массив с помощью литерала массива и присваивает его переменной trees:

var trees:Array = ["birch", "maple", "oak", "cedar"]:

Следующий код присваивает переменной firstTree значение первого элемента массива trees («birch»):

var firstTree-.String = trees[0];

Следующий код присваивает значение третьего элемента («oak») переменной f avoriteTree (не забывайте, что индексы начинаются с 0, поэтому элемент с индексом 2 является третьим элементом массива!):

var favoriteTree:String = trees[2]:

Теперь начинается самое интересное. Поскольку индекс элемента можно задавать с помощью любого выражения, возвращающего число, для указания индекса элемента мы можем запросто использовать переменные или сложные выражения вместо обычных чисел. Например, следующий код присваивает значение четвертого элемента («cedar») переменной lastTree:

var i = 3:

var lastTree:String = trees[i]:

В качестве индексов массива мы можем использовать даже выражения вызова, возвращающие числовые значения. Например, следующий код присваивает переменной randomTree случайно выбранный элемент массива trees, индексом которого является случайное число в диапазоне от 0 до 3: ‘

var randomTree:String = trees[Math. floor(Math. random( ) * 4)]:

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



Полезные ссылки
Случайные записи
  • 13.02.2014">Преимущества МДФ панелей
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 049
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 009
  • 17.11.2011">Обзор SandyBridge E
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.54
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.111
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 067
  • 27.06.2012">Пользователи Android получили доступ к облачному сервису OneCloud
  • 13.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.98
  • 22.02.2013">Самса с курицей
  • 15.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.56
  • 06.03.2013">Молдавская мамалыга
  • 14.08.2011">Купи билет через интернет
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 044
  • 21.03.2011">Руководство по actionscript. часть 2, стр. 041
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...