Конвертация типов данных ActionScript
На этом уроке курса «ActionScript 3.0 Уроки для новичков» мы рассмотрим два вопроса:
- Конвертация типов данных ActionScript
- Дополнительная информация
Для чего и как нужно делать конвертацию типов данных в ActionScript, легко понять, рассмотрев следующий пример.
В текстовых полях могут отображаться только строки (String). Если Вы попытаетесь поместить туда данные другого типа, то получите сообщение об ошибке. Например, следующий код будет признан ошибочным
txtNumOfChar.text = myName.length;
В панели Compiler Errors (ошибки компайлера) Вы увидите сообщение об ошибке с полной расшифровкой причины: "1067: Implicit coercion of a value of type int to an unrelated type String." Такие ошибки появляются в результате размещения чисел (Number) – значение свойства length – в текстовом поле (Text Field). Чтобы избежать подобных недоразумений Вам необходимо конвертировать "проблемный" тип данных в нужный, т.е. String.
Давайте сделаем необходимые корректировки и получим правильный код
txtNumOfChar.text = String(myName.length);
Точно такая же ошибка возникнет в случае помещения в текстовое поле значения любого другого типа данных отличного от String. Решением всегда будет преобразование или конвертация значения переменной в String!
Иногда, происходит автоматическая конвертация значения переменной. Например, если Вы соединяете два значения с разными типами данных – Number и String, то результирующему значению автоматически будет присвоен тип String. После этого можно помещать итоговое значение в текстовое поле и ошибки не будет. Например, значение
txtResult.text = "Сумма равна " + (3 + 4);
будет автоматически приведено к типу данных String, т.к. здесь соединяются два разных типа данных String ("Сумма равна") и Number (3 + 4).
Конвертация типов данных
Создайте текстовое поле
txtLength:TextField = new Field();
Декларируйте переменную
var userName:String = "Петр";
Добавьте текстовое поле на сцену
addChild(txtLength);
Поместите значение свойства length в текстовое поле
txtLength.text = userName.length;
Нажмите Ctrl + Enter. Flash Player начнет воспроизводить ролик.
На экране появится панель "Ошибки Компайлера" с сообщением об ошибке в коде. (Если Вы не видите панель ошибок, то возможно, что она находится за Flash Player или панелью Actions)
Закройте Flash Player.
Перепишите последнюю инструкцию следующим образом
txtLength.text = String(userName.length);
Нажмите Ctrl + Enter. Flash-ролик запуститься. Ошибки не будет и в текстовом поле появится цифра – длина строки.
Дополнительная информация
Сложные типы данных такие как MovieClip или Array не могут быть конвертированы в строки (String), способом показанным выше. Но и передача их в виде аргумента методу String() ошибки тоже не вызовет!
Дело в том, что классы, которые определяют такие комплексные данные содержат в себе специальный метод toString(), который вызывается автоматически, как только Вы попытаетесь использовать их экземпляры как строковые (String). В результате Вы получите сообщение о типе данных того объекта, но не более того.
Например, если Вы поместите MovieClip непосредственно в текстовое поле, то результат будет выглядеть так
[object MovieClip]
Технически, String() не является методом, а скорее конструктором для класса String. Поэтому инструкция
String(userName.length);
просто создает новую строку из значения переменной, а не производит конвертацию.