Конвертация типов данных ActionScript

На этом уроке курса «ActionScript 3.0 Уроки для новичков» мы рассмотрим два вопроса:

  1. Конвертация типов данных ActionScript
  2. Дополнительная информация

Для чего и как нужно делать конвертацию типов данных в 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);

просто создает новую строку из значения переменной, а не производит конвертацию.