4.4. Выражения и операции
В отличие от строковых и числовых констант, явно задающих значение, в языке ActionScript могут использоваться выражения, значения которых для дальнейшего использования должны быть вычислены. Например, если написать в коде число 5 или строку "абвгд", то эти значения могут использоваться программой (например, присваиваться переменным) без какой-либо дополнительной обработки. Такие значения обычно называют константами, или литералами.
Если же для дальнейшего использования значение должно быть вычислено, то его называют выражением. Например, запись 5 + 5 является типичным выражением, так как для дальнейшего использования его значение нужно вначале вычислить. В выражениях применяются различные операции, которые мы сейчас и рассмотрим.
Строковые операции
Если мы имеем дело со строковыми данными, то здесь все предельно просто. Единственная возможная операция -
это уже рассмотренная нами конкатенация, для которой может использоваться знак + или ключевое слово add.
Правда, со строковыми данными, как и с числовыми, можно производить операции сравнения. О них мы расскажем отдельно чуть позже.
Арифметические операции
Теперь перейдем к числовым значениям. С ними, прежде всего, можно производить математические действия:
сложение (+), вычитание (-), умножение (*), деление (/) и вычисление остатка от деления (%). Обратите
внимание на то, что если в сценарии встретится деление на 0, то никакой ошибки с немедленным выходом из
программы не произойдет. Просто результатом таких действий являются специальные значения. Если мы,
например, напишем
a = 5 / 0;
b = -2 / 0;
в этом случае при просмотре ролика, нажав клавиши CTRL+ALT+V, получим
Variable _level0.a = 1.#INF
Variable _lavel0.b = -1.#INF
Как видите, значениями переменных а и b являются некие аналоги понятий плюс и минус бесконечности. Несмотря на то что эти значения выглядят как строковые, они являются числами - обратите внимание на отсутствие кавычек в листинге значений переменных.
Логические операции
Помимо арифметических операций с данными можно производить операции логические. Логические операции
делятся на булевы и побитовые.
При булевой логической операции действия производятся над логическими значениями «истина» и «ложь», для которых в языке ActionScript определены ключевые слова true и false. Результатом также является логическое значение. Если в качестве исходных данных используются числовые значения, то значение 0 трактуется как «ложь» (false), а любое другое значение - как «истина» (true).
Булевы операции
На всякий случай приведем краткое общее описание логических операций. Логических операций всего четыре:
И, ИЛИ, НЕ и ИСКЛЮЧАЮЩЕЕ ИЛИ. Операция НЕ использует только одно исходное значение и дает в результате
противоположное. Остальные операции используют по два исходных значения.
Результат операции И - «истина», только если оба операнда имеют значение «истина», а в остальных случаях - «ложь». Результат операции ИЛИ «истина», если хотя бы один из операндов имеет значение «истина». Операция ИСКЛЮЧАЮЩЕЕ ИЛИ дает значение «истина», если значения ее операндов различны.
При побитовой операции одно и то же действие производится с каждым двоичным разрядом (битом) числового значения, и результатом является также число. Например, какой результат даст побитовое ИЛИ между значениями 6 и 7? Представим оба числа в двоичном виде: 110 и 111. Теперь хорошо видно, что в каждом из трех разрядов имеется хотя бы одна единица (соответствующая значению «истина»). Соответственно, и в результате во всех трех разрядах получатся единицы. Следовательно, результат - двоичное 111, или десятичное 7.
А какой результат получится, если произвести операцию побитового И между значениями 6 и 7? Очевидно, что результат число 6 (двоичное 110), поскольку только во втором и третьем битах оба эти числа содержат 1. Следовательно в первом разряде результата останется 0.
Нa этом мы, пожалуй, закончим краткое обозрение логических операций и вернемся к языку ActionScnpt. Здесь логические операции, обозначаются следующим образом:
- && или and - логическое И;
- || или or - логическое ИЛИ;
- ! или not - логическое НЕ.
Побитовые операции
Можно использовать также побитовые логические операции:
- & - побитовое логическое И;
- | - побитовое логическое ИЛИ;
- ~ - побитовое логическое НЕ;
- ^ - побитовое логическое ИСКЛЮЧАЮЩЕЕ ИЛИ.
а = 6 & 7;
b = 6 | 7;
с = ~6;
cc = !6;
d = 6 ^ 7;
В листинге переменных при просмотре ролика мы получим следующее:
Variable _level0.a = 6
Variable _level0.b = 7
Variable _level0.c = -7
Variable _level0.cc = false
Variable _level0.d = 1
Еще две интересные операции, применяемые в языке ActionScript, - это инкремент (увеличение на 1) и декремент (уменьшение на 1). Например, если написать такой код:
i = 3;
i++;
то в результате переменная i получит значение 4. Инкремент обозначается двумя плюсами, а декремент - двумя минусами.
Операции сравнения
Теперь настало время перейти к операциям сравнения. Они проверяют истинность того или иного утверждения и
принимают булево значение true или false. Например, выражение 5 > 4 (пять больше четырех) имеет значение
true, а выражение 2 > 3 - значение false.
Для сравнения числовых значении могут быть использованы следующие операции:
- > - больше;
- < - меньше;
- >= - больше или равно;
- <= - меньше или равно;
- == - равно;
- != - не равно (можно также использовать старый вариант записи - <>).
Операции сдвига
Еще одина класс операций, используемых в языке ActionScript, - этотак называемые операции сдвига. Есть
три вида такой оперции:
- >> - сдвигает числовое значение на указанное количество двоичных разрядов вправо;
- << - сдвигает числовое значение на указанное количество двоичных разрядов влево;
- >>> - сдвигает числовое значение на указанное количество двоичных разрядов вправо, причем свободные разряды заполняются нулями.
a = 40 << 2;
b = -40 >> 2;
bb = -40 >>> 2;
В листинге переменных увидим следующее:
Variable _level0.a = 160
Variable _level0.b = -10
Variable _level0.bb = 1073741814
Составные операции
Кроме того, в языке ActionScript можно использовать так называемые составные операции. Примером такой
операции является сложение с присваиванием. Например, запись
z += 2;
означает увеличение значения переменной z на 2. Собственно говоря, вместо предыдущей записи можно написать:
z = z + 2;
c тем же результатом - к значению переменной z будет прибавлено число 2 и затем результат присвоен переменной z. Однако в последнем случае интерпретатор языка выполнит две операции (сложение и присваивание), в то время как при использовании составной операции - всего одну. Поэтому предпочтительнее использовать составные операции - в результате ролик меньше «тормозит».
Вот какие составные операции можно использовать:
- += - сложение с присваиванием;
- -= - вычитание с присваиванием;
- *= - умножение с присваиванием;
- /= - деление с присваиванием;
- %= - остаток от деления с присваиванием;
- >>= - сдвиг вправо с присваиванием;
- >>>= - беззнаковый сдвиг вправо с присваиванием;
- <<= - сдвиг влево с присваиванием;
- &= - побитовое логическое И с присваиванием;
- |= - побитовое логическое ИЛИ с присваиванием;
- ^= - побитовое логическое ИСКЛЮЧАЮЩЕЕ ИЛИ с присваиванием.
Заканчивая рассказ об операциях ActionScript, необходимо упомянуть еще о двух. По форме записи эти две операции больше напоминают функции, но реализованы как операции. Первая из них позволяет определить тип данных. Как вы уже знаете, в языке ActionScript тип данных может быть либо числовым, либо строковым; кроме того, существует логический тип данных. В зависимости от типа данных исходного выражения операция typeof возвращает его название. Например, написав
а = 4000;
b = "abc";
с = true;
аа == typeof (a);
bb = typeof (b);
ее = typeof (с);
мы получим в листинге переменных
Variable _lebel0.a = 4000
Variable _lebel0.b = "abc"
Variable _lebel0.c = true
Variable _level0.aa = "number"
Variable _level0.bb = "string"
Variable _level0.cc = "boolean"
Если значение исходной переменной не определено, операция typeof возвращает значение undefined.
Другая операция, по внешнему виду напоминающая функцию, всегда возвращает неопределенное значение. При этом, однако, происходит вычисление исходного выражения. Эта операция имеет синтаксис void (выражение).
Все примеры, приведенные в этом и предыдущем разделе, имели несколько абстрактный характер, поскольку они были предназначены только для описания механизма функционирования переменных, выражений и операций. Практическое применение сведений, приведенных в этих разделах, иллюстрируется в главах 5 и 6.