Руководство по actionscript. часть 1, стр. 133
Нетипизированные переменные, параметры и возвращаемые значения не ограничены определенным типом данных (в отличие от типизированных переменных, параметров и возвращаемых значений). Например, нетипизированной переменной можно присвоить значение типа Boolean в одной строке кода, а в следующей строке присвоить этой же переменной объект VirtualPet без каких-либо ошибок:
var stuff = true:
stuff = new VirtualPetC’Edwin»); // Ошибки нет
I Компилятор языка ActionScript не генерирует ошибки несоответствия типов для нетипи-м$ j „ зированных переменных, параметров и возвращаемых значений.
ipj_
Если программист хочет явно указать, что переменная, параметр или возвращаемое значение намеренно являются нетипизированными, он может использовать специальную аннотацию типа : *. Например, следующий код определяет явно не-типизированную переменную totalCost:
var totalCost:* = 9.99:
Следующий код определяет ту же переменную, но на этот раз она является нетипизированной неявно:
var totalCost =9.99;
Неявно нетипизированные переменные, параметры и возвращаемые значения обычно используются в тех случаях, когда в программе вообще не применяются аннотации типов, что дает программисту возможность обрабатывать любые типы ошибок на этапе выполнения. Явно нетипизированные переменные, параметры и возвращаемые значения обычно используются в тех случаях, когда программист желает явно указать место в программе, компилируемой в строгом режиме, где допустимо применение нескольких типов данных. Аннотация типа : * позволяет предотвратить появление предупреждения об «отсутствующей аннотации типа» для нетипизированной переменной. Более подробно этот вопрос будет рассмотрен в разд. «Предупреждения об отсутствующих аннотациях типов».
Три особых случая строгого режима
Существует три ситуации, в которых компилятор игнорирует ошибки несоответствия типов при компиляции программы в строгом режиме, не позволяя выявить возможные ошибки до этапа выполнения:
? когда нетипизированное выражение присваивается типизированной переменной или параметру либо возвращается из функции с объявленным типом возвращаемого значения;
? если любое выражение присваивается типизированной переменной или параметру, чьим объявленным типом является Boolean, либо возвращается из функции, объявленным типом возвращаемого значения которой является Boolean;
? когда любое числовое значение используется там, где должен быть указан экземпляр другого числового типа.
Рассмотрим каждый из описанных случаев на примере. Сначала создадим нети-пизированную переменную pet и присвоим ее значение типизированной переменной <±
var pet:* = new Vi rtualPet(«Francis»): pet = new Date( ); var d:Date = pet;
Поскольку переменная pet может содержать значение любого типа, в третьей строке компилятор не сможет определить, принадлежит ли значение переменной pet типу данных Date. Чтобы определить это, код должен быть не только откомпилирован, но и выполнен. Во время исполнения кода среда Flash сможет узнать результат попытки присваивания. В случае с предыдущим кодом значение, хранящееся в переменной pet (присвоенное во второй строке), на самом деле принадлежит типу данных Date (даже несмотря на то, что изначально значение переменной pet, присвоенное в первой строке кода, было несовместимо с типом данных Date). Таким образом, операция присваивания будет выполнена без ошибок.