Московский физико-технический институт
Опубликован: 23.12.2005 | Доступ: свободный | Студентов: 2766 / 183 | Оценка: 4.61 / 4.44 | Длительность: 27:18:00
ISBN: 978-5-9556-0051-2
Лекция 2:

Базовые понятия Action Script

Таблица приоритетов

Приоритеты операторов во Флэш МХ совпадают с таковыми в языке Java. Мы приведем здесь таблицу 2.3 приоритетов, добавив отсутствующие в Java операторы.

Все операции, кроме тех, про которые это упомянуто особо, вычисляются слева направо.

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

Таблица 2.3. Приоритеты операторов
Приоритет Операторы Тип операторов Комментарии
1 () Группировка
2 []. Доступ к полю или элементу
3 - ~ ! ++ - typeof void Унарные Вычисляются справа налево
4 * / % Мультипликативные
5 + - Аддитивные
6 << >> >>> Бинарный сдвиг
7 < > <= >= instanceof Отношение
8 == != === !== Проверка равенства
9 & Поразрядное И (AND)
10 ^ Поразрядное исключающее ИЛИ (XOR)
11 | Поразрядное ИЛИ (OR)
12 && Логическое И (AND)
13 || Логическое ИЛИ (OR)
14 ?: Условный оператор Вычисляется справа налево
15 = *= /= %= += -= <<= >>= >>>= &= ^= |= Присваивание (простое и составное) Вычисляются справа налево
16 , Последовательное вычисление

Особенности работы управляющих конструкций

Блоки

Блоки во Флэше делаются так же, как и в С++ и Java, - с помощью фигурных скобок. В отличие от С++ переменных, локальных внутри блока во Флэше нет. Как мы узнаем дальше, локальность переменных поддерживается только внутри функций. Переменные же, созданные внутри кода в кадре, попадают в тот объект, в кадре которого мы находимся. Ключевое слово var, означающее создание локальной переменной, в данном случае игнорируется. Таким образом, хотя создание вложенных блоков без каких-либо управляющих конструкций, относящихся к этим блокам, разрешено, особого смысла это не имеет.

Стандартные управляющие конструкции

Точно так же, как в С++ и Java, работают конструкции if-else, for, while, do-while, switch ; в циклах можно пользоваться операторами break и continue (правда, средств для выхода из многократно вложенных циклов вроде goto или break c меткой не предусмотрено). Вот небольшие примечания по работе стандартных управляющих конструкций во Флэш.

  • При наличии многократно вложенных проверок можно пользоваться оператором else if (из двух слов). Это избавляет от необходимости писать блоки большой вложенности (особенно неприятно форматировать такие блоки ). Таким образом, у вас может образоваться большая цепочка из операторов if - else if - else if - else if ... Завершаться такая цепочка может либо оператором else if, либо оператором else. Как вы знаете по C++ или Java, после каждого из этих операторов может размещаться как одна инструкция, так и блок из любого числа инструкций. В некоторых случаях даже одинокую инструкцию придется заключить в блок (например, если она управляющая и в ней самой есть блок, а рассматриваемый оператор if или else if не является последним в цепочке). Впрочем, во всех потенциально неясных случаях лучше ставить фигурные скобки хотя бы из соображений читаемости кода.
  • При пользовании оператором for помните, что запись for (int i=0; i<5; i++) во Флэше неверна. Вместо int надо писать var (или не писать ничего; но последний вариант мы не рекомендуем - будут проблемы с перенесением такого кода в функцию. В параграфе о локальных переменных из лекции 5 мы поговорим об этом подробнее).
  • При пользовании оператором switch учтите, что объекты в нем сравниваются при помощи оператора строгого сравнения ===, учитывающего тип объекта. То есть число и строчка с записью этого числа, для которых оператор == выдаст true, будут сочтены разными. Также не забывайте, что данные объектных типов (даже типа Number или String ) сравниваются по ссылке. То есть переменные считаются равными, только если указывают на один и тот же объект. Так что в подобных случаях не брезгуйте явным преобразованием типа (особенно если вы получили, скажем, числовой ввод пользователя из текстового поля, а в клаузах case у вас стоят обыкновенные числа. В этом случае приведение к Number внутри switch является необходимым).
  • Как мы уже сказали, с тех пор, как анафеме был предан оператор goto, появилась специфическая проблема выхода из многократно вложенных циклов. В языке Java она решается при помощи оператора break с меткой. К сожалению, ничего подобного нет в языке ActionScript 1.0. Нельзя даже (хотя в стандарте ECMAScript это и описано) бросить и поймать исключение. Так что ничего кроме использования флагов выхода из цикла (или такого экзотического способа: создать специальную функцию, в которой будет помещен внутренний цикл, и из которой можно будет выйти с помощью оператора return ) мы для решения этой проблемы предложить не можем. К счастью, возникает она достаточно редко.