Три особых случая строгого режима ActionScript 

 

 

Существует три ситуации, в которых компилятор игнорирует ошибки  

несоответствия типов при компиляции программы в строгом режиме, не позволяя выявить 

возможные ошибки до этапа выполнения: 

□ когда нетипизированное выражение присваивается типизированной  

переменной или параметру либо возвращается из функции с объявленным типом  

возвращаемого значения; 

□ если любое выражение присваивается типизированной переменной или  

параметру, чьим объявленным типом является Boolean, либо возвращается из функции, 

объявленным типом возвращаемого значения которой является Boolean; 

□ когда любое числовое значение используется там, где должен быть указан  

экземпляр другого числового типа. 

 

Рассмотрим каждый из описанных случаев на примере. Сначала создадим нети- 

пизированную переменную pet и присвоим ее значение типизированной  

переменной d: 

var pet:* = new Virtual Pet("Francis"); 

pet = new Date( ); 

var d:Date = pet; 

Поскольку переменная pet может содержать значение любого типа, в третьей 

строке компилятор не сможет определить, принадлежит ли значение переменной 

pet типу данных Date. Чтобы определить это, код должен быть не только  

откомпилирован, но и выполнен. Во время исполнения кода среда Flash сможет узнать 

результат попытки присваивания. В случае с предыдущим кодом значение,  

хранящееся в переменной pet (присвоенное во второй строке), на самом деле  

принадлежит типу данных Date (даже несмотря на то, что изначально значение переменной 

pet, присвоенное в первой строке кода, было несовместимо с типом данных Date). 

Таким образом, операция присваивания будет выполнена без ошибок. 

Теперь рассмотрим следующий код, в котором определяется переменная b типа 

Boolean и этой переменной присваивается целочисленное значение 5: 

var b:Boolean = 5; 

Даже несмотря на то, что значение 5 не принадлежит типу данных Boolean,  

компилятор не генерирует ошибку несоответствия типов. Вместо этого он делает  

предположение, что программист желает привести значение 5 к типу данных Boolean 

(в соответствии с правилами, описанными в разд. «Преобразование в примитивные 

типы») и генерирует соответствующее предупреждение. Такая «мягкость»  

компилятора позволяет сократить количество кода в программе. Например,  

предположим, что в качестве типа возвращаемого значения метода getHunger ( ) класса 

VirtualPet указан тип данных Number. Программа может создать переменную, 

содержащую информацию о том, является животное живым или мертвым,  

используя следующий код: 

var isAlive:Boolean = somePet.getHunger( ); 

В соответствии с правилами, описанными в разд. «Преобразование в примитивные 

типы», число 0 преобразуется в значение false, а остальные числа — в значение 

true. Таким образом, если метод getHunger ( ) возвращает любое значение, 

отличное от 0, переменной isAlive присваивается значение true; в противном 

случае переменной isAlive присваивается значение false (животное  

оказывается мертвым, когда у него не остается калорий). 

Для сравнения приведем альтернативный, чуть более длинный код, который  

пришлось бы использовать в том случае, если бы компилятор проверял типы для  

переменных типа Boolean (не позволяя преобразовывать их на этапе выполнения 

программы): 

var isAlive:Boolean = somePet.getHunger( ) > 0; 

Наконец, рассмотрим код, в котором определяется переменная xCoordinate 

типа int и этой переменной присваивается значение 4, 64 5 9 типа Number: 

var xCoordinate:int = 4.6459; 

 

Даже несмотря на то, что значение 4, 64 5 9 не принадлежит типу данных int, 

компилятор не генерирует ошибку несоответствия типов. Вместо этого он делает 

предположение, что вы желаете преобразовать значение 4, б 4 5 9 к типу данных int 

(в соответствии с правилами, описанными в разд. «Преобразование в примитивные 

типы»). Это позволяет максимально упростить взаимодействие между числовыми 

типами данных языка ActionScript. 




BACK NEXT

Сайт является частным собранием материалов и представляет собой любительский информационно-образовательный ресурс. Вся информация получена из открытых источников. Администрация не претендует на авторство использованных материалов. Все права принадлежат их правообладателям