Урок 1: ActionScript 3.0 - Переменные - Форум
Страница 1 из 11
Форум » Программирование » Action script » Урок 1: ActionScript 3.0 - Переменные
Урок 1: ActionScript 3.0 - Переменные
Администратор
Уровень 999
Сообщений: 2093
Дата: Понедельник, 04.06.2012, 10:15:06 | Сообщение # 1
Offline
Ключевое слово var стало доступным в ActionScript 1, начиная с Flash 5, но только сейчас, в  ActionScript 3 оно обязательно. Единственное исключение составляет определение нового переменного значения в экземпляре динамического объекта (объект, чьи переменные заранее не определены) с использованием явной ссылки на этот объект.

Code
aDynamicObject.newVar = value; // only time var not used

В примере, приведенном выше, переменная newVar является новой переменной, определенной в объекте aDynamicObject без использования var.  Фактически, var не может использоваться в комплексных ссылках, то есть любых ссылках, которые требуют доступа через точку (.) или скобку ([]), чтобы ссылаться на переменную.

При определении переменной должны использоваться только числа, буквы, знак доллара ($) и подчеркивания (_), также переменная не может начинаться с числа. Так имена bits32, _bits32 и $bits32 допустимы, а 32bits – недопустимое имя переменной, так как начинается с числа. Такие же ограничения применяются и к ActionScript 2.


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


Code
// Any timeline script
var name:String = "Joe"; // Error: A conflict exists with inherited definition (name)

Точно так же, не следует именовать переменные после объектов высшего уровня, или функций, таких как Array, XML, или trace, иначе эти определения не будут больше вам доступны.


Примечание: чувствительность к регистру
Начиная с седьмой версии флеш плеера, ActionScript является чувствительным к регистру, поэтому переменные Name и name отличаются.  Это применяется и в ActionScript 3.

Панель  Actions во Flash CS3 может иногда быть полезной при обнаружении конфликтов, так как распознанные ключевые слова подсвечиваются синим цветом. Если вы не уверены, является ли используемое вами имя переменной конфликтным, проверьте документацию к MovieClip и посмотрите, какие свойства и методы для MovieClip уже существуют (не забудьте включить унаследованные свойства и методы).

В ActionScript 3 появилось ограничение на то, что с помощью var переменную в коде можно объявить только один раз в любой области, или временной шкале. Другими словами, если вы объявляете переменную x в начале скрипта и хотите снова ей воспользоваться в конце скрипта, то вам не следует снова использовать ключевое слово var для этой переменной.


Code
var x = value; // ok

var x = differentValue; // error; you can only use var once

При определении переменных на временной шкале во Flash, они применяются ко всем кадрам этой шкалы, а не только к текущему кадру. Поэтому, если вы определяете, или объявляете, переменную x в кадре 1 с использованием var, вы не можете снова использовать var с этой переменной в другом кадре.

При объявлении переменных с помощью ключевого слова var (и только с помощью ключевого слова var [или const]) у вас есть возможность задать тип переменной. Тип переменной описывает тип значения, которое она будет содержать. Это стало новым свойством в ActionScript 2 и продолжает существовать в ActionScript 3 в том же формате.  Поэтому, например, если вы хотите, чтобы переменная x содержала числовое значение, вы зададите ей тип Number через двоеточие и терм Number сразу же после имени переменной:


Code
var x:Number; // variable x contains number values

В обоих версиях ActionScript задание типа является необязательным. Тем не менее, ActionScript 3 отличается по тому, что он также будет оставлять информацию о типе во время проигрывания клипа, в отличие от ActionScript 2, который использовал ее строго для проверки ошибок во время компиляции (во время публикации).  Это означает, что вам следует тщательно взвешивать решения по поводу типа, особенно потому, что его нельзя переназначить переменной с помощью var второй раз в ActionScript 3 (проделав такое в ActionScript 2, вы сможете использовать разные типы для одной переменной). Вы также обнаружите, что такое поведение может оказаться ненадежным по мере того, как вы начнете работать с конфликтами типов в дальнейшем.

Не назначая переменной никакого типа, вы можете использовать для нее любой тип данных, какой захотите. ActionScript 3 также предоставляет специальный "untyped" (нетипизированный) тип, который представляет просто отсутствие типа данных. Он задается с помощью звездочки (*).


Code
var anyValue:*; // variable can have any type

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

Если вы не назначили переменной значения по умолчанию, то оно будет привязано на основе ее типа. Если никакого типа не было назначено, то переменной будет присвоено значение undefined.  Следующий список детально показывает значения по умолчанию разных типов данных в ActionScript 3:


Code
var untyped:*; // (or no typing) undefined
var boolean:Boolean; // false
var number:Number; // NaN
var integer:int; // 0
var unsignedInteger:uint; // 0
var string:String; // null
var object:Object; // null

Любой другой тип объекта имеет значение по умолчанию null. Следует отметить, что значения типа object (любой тип объекта, включающий массивы и объекты, созданные из пользовательских классов) по умолчанию равны null, а не undefined.  На самом деле, объекты в ActionScript 3 не могут быть undefined (не определены). Если они не имеют значения, тогда они равны null.  Только нетипизированным переменным, или несуществующим переменным, к которым пытаются получить доступ, будет присвоено значение undefined.

Числовые типы сейчас уникальны, поэтому больше не могут иметь значения undefined или null. Если они не имеют значения, то рассматриваются как NaN ("не число").  Однако, NaN – хитрое значение. На самом деле нельзя сравнить NaN с другим NaN с помощью оператора равенства (==), потому что вероятно они не будут одинаковы. Если вам когда-нибудь понадобится проверить, имеет ли число значение NaN, то всегда нужно использовать isNaN().


Code
if (isNaN(myNumber))  // checks to see if Number is defined

Типы переменных int и uint впервые появились в ActionScript 3. Это специальные типы чисел, которые представляют 32-битные целые числа, или целые числа. Тип int – обычное целое число, а uint – это беззнаковое целое, или целое число, чье значение не может быть отрицательным. Эти типы чисел могут иметь только целочисленные значения. Они не могут равняться null, undefined., или даже NaN, как тип Number, на котором они основаны. Таким образом, они основаны на типе Number, тем не менее, вы заметите, что их наименования типа ("int" и "uint") начинаются с прописной буквы. Это показывает, что с этим типом не связан специфический тип объекта, или определение класса. Вместо этого, эти типы главным образом разделяют определение Number с типами Number (за исключением констант MIN_VALUE и MAX_VALUE, которые имеют разные значения для каждого типа).


Значения типов Number, int и uint

 Числовой тип

 Значения
 Number от 4.9406564584124654e-324 до 1.79769313486231e+308
 int от -2147483648 до 2147483647 (только целые числа)
 uint от 0 до 4294967295 (только целые числа)


Существует еще один тип данных, начинающийся с прописной буквы. Это специальный тип void. Он начинался с заглавной буквы в ActionScript 2, но в ActionScript 3 утратил это, так как наряду с типами int и uint не существует специфического определения, связанного с ним. Это тип пока еще не виден, так как применяется только к функциям.


Новые базовые типы данных ActionScritpt 3


 ActionScript 3.0 ActionScript 2.0
 * (нетипизирован)
 int Number (свободно)
 uint Number (свободно)
 void Void


Также в ActionScript 3 по-новому ведет себя ключевое слово delete. Ключевое слово delete  используется для удаления переменных из объекта. Тем не менее, переменные, определенные с помощью var, в ActionScript 3 не могут быть удалены. С помощью delete могут быть удалены только динамические переменные, определенные внутри динамических объектов. Для остальных переменных эквивалентом удаления будет присвоение этим переменным значения null.

Из вышесказанного видно, что не все переменные могут иметь значения null. Переменные, определенные как int, uint и Number могут иметь только числовые значения (тип Number также может иметь значение NaN), которые не включают null – то же самое применяется и к значениям Boolean, которые могут быть либо true, либо false. Для таких случаев не существует эквивалента для delete. Переменные с типом Number могут быть установлены в значение NaN, а переменные типа int и uint все время должны оставаться числовыми, а булевы переменные просто либо true, либо false.


Code
// Create a dynamic object with dynamic property
var obj:Object = new Object();
obj.prop = "value";
// delete dynamic property on obj using delete
delete obj.prop
// cannot delete obj, only able to set to null
obj = null;
// int, unit, Number and Boolean
// types cannot be deleted
var intNum:int = 0;
var uintNum:uint = 0;
var numNum:Number = NaN;
var bool:Boolean = false;
Подпись пользователя
Форум » Программирование » Action script » Урок 1: ActionScript 3.0 - Переменные
Страница 1 из 11
Поиск: