Создание переменных

В ActionScript, равно как и в таких языках, как Pascal или JavaScript, объявить переменную можно, используя ключевое слово var:

var new_obj; // Создана новая переменная...

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

trace(new_obj); // Выводит: undefined

Впрочем, переменные редко объявляются пустыми. Обычно им сразу же ставится в соответствие некоторое конкретное значение (на худой конец — null). Делается это при помощи оператора присваивания «-», который мы использовали уже десятки раз:

var new_obj=null; // Если переменная изначально не имеет значения,
// то ей нужно присвоить null

Одновременно можно объявить и несколько переменных, для чего нужно использовать оператор «,»:

var а=1, b=2, с=3; // Строка эквивалентна var a=1; var b=2; var c=3;

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


Как это делается:

var number:Number=0;

Во Flash 4, до появления современного ActionScript, для объявления и переопределения переменных использовалось предложение set(name, expression), где name — Имя, expression — присваиваемое выражение. Например:

set(a, null); // Эквивалентно a=null;

В настоящее время функции предложения set() сузились до создания переменных с динамическими именами:

var i:Number = Math.round(Math.random()"10); // Генерируем случайное
// число от 0 до 10
set("var"+i,"новая переменная"); // Создаем переменную со случайным именем
trace(eval("var" + i)); // Выводит: "новая переменная"

Надо признать, что в современных версиях Flash предложение set() используется достаточно редко, что связано с тем, что у него имеется куда более мощный конкурент — массивы (а точнее, оператор доступа к свойствам «()», который часто называют оператором доступа к элементам массива — отчасти из-за схожести с литералом массива «[]»). Однако если массивы не применяются, то set() просто незаменима (и таковой она была во Flash 4), так как невозможно присвоить значение переменной, переведя строку в идентификатор при помощи eval():

eval("variable")=3; // Эта строка вызывает ошибку
set("variable",3); // Верное выражение

Чтобы создать переменную с динамически формируемым именем более технично, чем с использованием предложения set, нужно применить следующую запись:

this["name"]=value,

где this — указатель на текущую временную диаграмму (ее свойствами являются все переменные размещенного на ней кода); "name" — имя переменной; value — объект данных, который должна хранить переменная.


Например:

this ["variable"] = "Привет";
trace(variable); // Выводит: Привет

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

Хорошим тоном в ActionScript-программировании является объявление всех переменных сценария в одном месте — в выделенной комментариями области вверху листа с кодом. Такой подход помогает избежать повторения идентификаторов в больших программах, а также делает сценарий более читабельным и понятным для сторонних лиц. Весьма оправданно объявлять вместе с основными переменными и переменные служебные — для хранения промежуточных результатов или флагов состояния.

//*******Переменные*********************************
var speed:Number=10; // Скорость объекта
var size:Number=100; // Размер объекта в пикселях
var crash:Number=null; // Расстояние по дубликата
//**************************************************

Имеется и более существенная причина, по которой все переменные должны объявляться в начале сценария.


Чтобы понять ее, проанализируйте следующий код:

function func():Void { // Функция, вызывающая прописанные позже нее
// переменную и функцию
trace(per);
func2();
}
func (); // Выводит: undefined Привет!!!
var per:String = "Пока";
function func2():Void {
trace("Привет!!!");
}

Дело в том, что вызов функции может предшествовать ее определению. А вот прочитать значение переменной выше строки ее задания невозможно. Такая двойственность очень часто приводит к путанице и ошибкам. Например, если вы из функции А() вызываете функцию В(), которая использует переменную per, объявленную между ними, то активация А() выше определения per приведет к неопределенности:

function A():Void {
В();
}
А(); // Выводит: undefined
var par:String = "Привет";
А(); // Выводит: Привет (вызов расположен ниже определения переменной)
function B():Void {
trace(par);
}

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

my_var = null; // Результат выполнения такой записи в большинстве
// случаев аналогичен var my_var=null;

Автоматическое создание переменных не является общепринятой нормой: в большинстве универсальных языков программирования появление неизвестного идентификатора вызывает ошибку.


В ActionScript же использование var не обязательно, J но является рекомендованным. И на то имеются веские причины:

• Явное определение переменных позволяет сделать сценарий более четким, облегчая тем самымего отладку и переделку.

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

Ключевое слово var позволяет строго типизировать переменные. Если попытаться задать тип переменной без var, то произойдет сбой при компиляции.

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

Статьи из раздела Action Script на эту тему:
Есть ли переменные в ActionScript?
Локальные переменные функций
Особенности операции присваивания
Особенности типизации переменных
Удаление переменных

Вернуться в раздел: Action Script / 3. Переменные