Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
as3_learning.pdf
Скачиваний:
43
Добавлен:
21.05.2015
Размер:
1.8 Mб
Скачать

ИЗУЧЕНИЕ ACTIONSCRIPT 3.0

70

Язык ActionScript и его синтаксис

package flash.events

{

public class MouseEvent extends Event

{

public static const CLICK:String = "click";

public static const DOUBLE_CLICK:String = "doubleClick"; public static const MOUSE_DOWN:String = "mouseDown"; public static const MOUSE_MOVE:String = "mouseMove";

...

}

}

Операторы

Операторы являются специальными функциями, принимающими один или несколько операндов и возвращающими значения. Операнд — это значение, обычно литерал, переменная или выражение, которые оператор использует в качестве входных данных. Например, в следующем программном коде операторы сложения (+) и умножения (*) используются с тремя литеральными операндами (2, 3, 4) для получения значения. Это значение затем используется оператором присваивания (=), чтобы назначить возвращаемое значение, 14, переменнойsumNumber.

var sumNumber:uint = 2 + 3 * 4; // uint = 14

Операторы могут быть унарными, бинарными или тернарными. Унарный оператор принимает один операнд. Например, оператор инкрементального увеличения (++) является унарным оператором, поскольку он принимает только один операнд. Бинарный оператор принимает два операнда. Например, оператор деления (/) принимает два операнда. Тернарный оператор принимает три операнда. Например, оператор условия (?:) принимает три операнда.

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

trace(5 + 5); // 10 trace("5" + "5"); // 55

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

trace(-3); // -3 trace(7 - 2); // 5

Последнее обновление 12.5.2011.

ИЗУЧЕНИЕ ACTIONSCRIPT 3.0

71

Язык ActionScript и его синтаксис

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

Старшинство и ассоциативность операторов определяют порядок, в котором обрабатываются операторы. Хотя может показаться абсолютно естественным для всех, кто знаком с арифметическими операциями, что компилятор должен обрабатывать оператор умножения (*) перед оператором сложения (+), в действительности компилятору необходимо явное указание того, какие операторы обрабатывать в первую очередь. Такие инструкции обычно упоминаются как старшинство операторов. ActionScript определяет старшинство операторов по умолчанию, которое можно изменить с помощью оператора скобки (()). Например, в следующем программном коде изменяется заданное по умолчанию старшинство операторов из предыдущего примера, чтобы заставить компилятор обработать оператор сложения перед оператором умножения.

var sumNumber:uint = (2 + 3) * 4; // uint == 20

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

Например, рассмотрим операторы меньше (<) и больше (>), имеющие одинаковое старшинство. Если оба оператора используются в одном выражении, оператор слева обрабатывается раньше, поскольку оба оператора являются ассоциируемыми слева. Это означает, что результат выполнения следующих двух инструкций будет одинаков.

trace(3 > 2 < 1); // false trace((3 > 2) < 1); // false

Оператор «больше» обрабатывается в первую очередь, что приводит к итоговому значению true, поскольку операнд 3 больше, чем операнд 2. Значение true затем передается оператору «меньше» вместе с операндом 1. В следующем программном коде показано промежуточное состояние.

trace((true) < 1);

Оператор «меньше» преобразует значение true в цифровое значение 1 и сравнивает это числовое значение со вторым операндом 1, возвращая значение false (значение 1 не меньше значения 1).

trace(1 < 1); // false

Заданную по умолчанию ассоциативность слева можно изменить с помощью оператора скобки. Можно заставить компилятор обрабатывать оператор «меньше» первым, если заключить этот оператор и его операнды в скобки. В следующем примере используется оператор скобки, чтобы получить другой результат, взяв в качестве операндов числа из предыдущего примера.

trace(3 > (2 < 1)); // true

Оператор «меньше» обрабатывается в первую очередь, что приводит к итоговому значению false, поскольку операнд 2 не меньше, чем операнд 1. Значение false затем передается оператору «больше» вместе с операндом 3. В следующем программном коде показано промежуточное состояние.

trace(3 > (false));

Оператор «больше» преобразует значение false в числовое значение 0 и сравнивает это числовое значение с операндом 3, возвращая значение true (значение 3 больше, чем 0).

trace(3 > 0); // true

Последнее обновление 12.5.2011.

ИЗУЧЕНИЕ ACTIONSCRIPT 3.0

72

Язык ActionScript и его синтаксис

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

Группа

Операторы

 

 

Основные

[] {x:y} () f(x) new x.y x[y] <></> @ :: ..

 

 

Постфиксные

x++ x--

 

 

Унарные

++x --x + - ~ ! delete typeof void

 

 

Мультипликативные

* / %

 

 

Аддитивные

+ -

 

 

Побитовый сдвиг

<< >> >>>

 

 

Реляционные

< > <= >= as in instanceof is

 

 

Равенство

== != === !==

 

 

Побитовое AND

&

 

 

Побитовое XOR

^

 

 

Побитовое OR

|

 

 

Логическое AND

&&

 

 

Логическое OR

||

 

 

Условие

?:

 

 

Присваивание

= *= /= %= += -= <<= >>= >>>= &= ^= |=

 

 

Запятая

,

 

 

Основные операторы

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

Все основные операторы, как показано в следующей таблице, имеют одинаковое старшинство. Операторы, являющиеся частью спецификации E4X, показаны с условным знаком (E4X).

Оператор

Выполняемая операция

 

 

[]

Инициализируется массив

 

 

{x:y}

Инициализируется объект

 

 

()

Группируются выражения

 

 

f(x)

Выполняется вызов функции

 

 

new

Выполняется вызов конструктора

 

 

x.y x[y]

Выполняется доступ к свойству

 

 

<></>

Инициализируется объект XMLList (E4X)

 

 

Последнее обновление 12.5.2011.

ИЗУЧЕНИЕ ACTIONSCRIPT 3.0

73

Язык ActionScript и его синтаксис

 

 

 

 

 

Оператор

Выполняемая операция

 

 

 

 

 

 

@

Выполняется доступ к атрибуту (E4X)

 

 

 

 

 

 

::

Уточняется имя (E4X)

 

 

 

 

 

 

..

Выполняется доступ к производному XML-элементу (E4X)

 

 

 

 

 

 

Постфиксные операторы

Постфиксные операторы берут какой-либо оператор и либо инкрементально увеличивают, либо декрементально уменьшают его значение. Хотя эти операторы и являются унарными, они классифицируются отдельно от остальных унарных операторов из-за своего высокого старшинства и особого поведения. Если постфиксный оператор используется как часть более крупного выражения, значение выражения возвращается до обработки этого оператора. Например, в следующем программном коде показано, что значение выражение xNum++ возвращается до того, как значение инкрементально увеличивается.

var xNum:Number = 0; trace(xNum++); // 0 trace(xNum); // 1

Все постфиксные операторы, как показано в следующей таблице, имеют одинаковое старшинство.

Оператор

Выполняемая операция

 

 

++

Инкрементально увеличивает (постфиксный)

 

 

--

Декрементально уменьшает (постфиксный)

 

 

Унарные операторы

Унарные операторы получают один операнд. Операторы инкрементального увеличения (++) и декрементального уменьшения (--) в этой группе являются префикснымиоператорами, и это означает, что они могут появляться перед операндами в выражении. Префиксные операторы отличаются от своих постфиксных эквивалентов тем, что операции инкрементального увеличения и декрементального уменьшения выполняются перед возвращением значения всего выражения. Например, в следующем программном коде показано, что значение выражение ++xNum возвращается до того, как значение инкрементально увеличивается.

var xNum:Number = 0; trace(++xNum); // 1 trace(xNum); // 1

Все унарные операторы, как показано в следующей таблице, имеют одинаковое старшинство.

Оператор

Выполняемая операция

 

 

++

Инкрементально увеличивает (префиксный)

 

 

--

Декрементально уменьшает (префиксный)

 

 

+

Унарный +

 

 

-

Унарный — (отрицание)

 

 

!

Логическое NOT

 

 

~

Побитовое NOT

 

 

Последнее обновление 12.5.2011.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]