Блок предложений

Иногда бывает необходимо объединить несколько предложений в группу. Наиболee очевидные примеры — это создание подпрограмм и реализация ветвления в алгоритме при помощи условий.

Указать транслятору, что несколько предложений должны рассматриваться как единое целое, можно, используя блок «{}»:

// Предложения в блоке образуют тело функции
function funс(а:Number, b:Number):Number {
var с:Number = a+b;
return c;
}

Помимо функций, блок используют такие управляющие предложения, как if, еlse, for, while, switch, with и некоторые другие. Попытка поместить предложения в блок, не связанный с одной из перечисленных структур, вызывает синтаксическую ошибку (так как он воспринимается как инициализатор литерала объекта).

Лексические структуры, использующие блок, требуют его задания лишь в том случae, если с ними должно быть связано несколько предложений. Если же в теле условного или циклического предложения имеется только одно высказывание, то блок совсем не обязателен:

for (var i=0; i<5; i++) trace (i); // Выводит: 0, 1, 2, 3, 4

Впрочем, при проведении автоматического форматирования скрипта в блок помещается даже одно предложение.


Скорее всего, эта особенность была добавлена в используемые по умолчанию правила синтаксиса для придания коду большего единообразия.

Тонкостью задания функций является то, что блок должен использоваться, даже если в теле прописано только одно предложение.

Определенные сложности в понимании общей структуры ActionScript может вызвать то, что для обозначения блока предложений и литерала объекта класса Object применяются одни и те же символы. Поэтому можно предположить, что код функции хранится в специальном объекте. Но это совсем не так. Фигурные скобки в теле функции или цикла и они же, но набранные в отдельном предложении, интерпретируются по-разному. Чтобы доказать это, обратимся к соответствующим байт-кодам:

//*************** "{}" как инициализатор объекта
var obj:Object=(a:1}; // Создаем переменную, хранящую объект
// со свойством а=1
// В форме байт-кодов
push 'obj', 'a', 1, 1 // В стек добавляются имя переменной,
// имя свойства, его положение и значение
initObject // Создается объект
varatequals // Объявляется переменная и связывается с объектом
end // Код завершается
//*************** "{}" как блок предложений
function func(a):Void { // Создаем функцию с формальным параметром а
trace (a);
}
// В форме байт-кодов
function 'func' @5 // Строка указывает,
// что 5 текущих строчек являются
// подпрограммой func
push 'a' // В стек добавляется строка с именем параметра
getVariable // Читается значение параметра а
trасе // Полученная величина трассируется
end // Завершение выполнения подпрограммы

Как видно из приведенного примера, между «{}» как инициализатором объекта и блоком предложений нет абсолютно ничего общего.


Просто данная структура, как многие операторы и идентификаторы, является перегруженной, выполняя сразу несколько функций. Увы, но двойственность (а иногда даже тройственность) многих лексических структур неизбежна — слишком мало служебных символов имеется на клавиатуре.
}

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Обработка исключительных ситуаций. Предложения try-catch-finally, throw и класс Error
Предложение return
Предложение with
Предложения var и function
Предложения выражений и пустые предложения

Вернуться в раздел: Action Script / 6. Предложения