Территория Flash/Flex

Поскольку эта серия рассчитана больше на начинающих, то и объяснять будем просто и немного сжато. Если захотите узнать обо всем подробнее, то лучше пойти в библиотеку, купить книгу Гурского или пролистать курсы по ActionScript2 на сайте INTUIT.ru.

В нескольких выпусках я расскажу немного об особенностях ActionScript2, по сравнению с другими, ну а книжки и хелпы вам читать все равно придется. Сегодня, как и было объявлено раньше, мы начнем обсуждать типы переменных. Но сделаем это достаточно хитрым образом. Почему?

Конечно, понятно, что переменная - это контейнер, который хранит в себе данные. Но, в отличие от C и Pascal, ActionScript2 вообще не требователен к строгому заданию типов и может обращаться с переменными динамически, то есть переприсваивать сами типы, автоматически их менять, подстраиваясь под исполняемые операции и т.п. Веселое дело? Да, конечно.

Поэтому стоит поговорить пока об основных типах данных, которых в ActionScript2 всего семь: number, string, boolean, null, undefined, object и movieclip. И сегодня мы просто "поиграемся" с тремя элементарными: number, string и boolean. Это интересно, возможно, вы полюбите ActionScript2.


Number

Речь идет о числах. В арсенале языка есть практически все необходимые средства для работы с ними, хотя с одним интересным упрощением - нет разделения на целые (integer), с плавающей запятой (floating-point) и так далее, они все - Number. Многих это повергает в шок, но, как вы потом поймете, в ActionScript вообще нет особенно строгой типизации в разграничениях, он создан для быстрого и эффективного программирования. То есть является как бы очень высокоуровневым и при этом очень открытым для нововведений. Во многих языках это разделение было необходимо для оптимизации приложений для работы под маломощные, по современным меркам, машины, а сейчас в большинстве случаев таковое и не требуется. Поэтому в ActionScript2 данное разбиение реализовано только на внутреннем уровне, а пользователю нет необходимости в различных переходах.

Хотя есть одно допущение, которое необходимо знать программистам - если число начинается с нуля, то оно воспринимается как восьмеричное, а с "0х" - как шестнадцатеричное (в основном, используется для задания цветов). При расчетах вы можете встретить также значения NaN, то есть, "не определено", а также "infinity"/"-infinity" - +/- бесконечность.

Основная масса вычислений, операций присваивания и т.п. производится так же (с такой же транскрипцией), как и во множестве других языков, т.е. те же "=", "+=", "++" и т.п. Именно поэтому ActionScript очень удобен и быстр для изучения.

Единственный момент, о котором стоит сказать отдельно, все основные математические функции и константы находятся в объекте Math, например:

trace(Math.round(16.355)); // выведет 16

Это округление до ближайшего целого, причем все очень удобно:

trace(18-Math.round(16.355)); // выведет 2

Часто бытует мнение, что объект Math несовершенен и слаборазвит, то есть содержит только основное из математики, и то не все. С этим можно поспорить, поскольку в сам объект можно добавить сколь угодно своих констант и функций. Это совсем не сложно.


String

Тут мы говорим о строчных данных. Они могут содержать любую текстовую информацию, а для обозначения применяются одинарные или двойные кавычки. В принципе, здесь все очень просто и понятно, есть возможности упрощения некоторых операций с ними с помощью escape-последовательностей, поддержка которых прописана в ЕСМА-262, а так... все стандартно, как и везде. Кодировка - 8-битовый Unicode-формат (UTF-8) и две разновидности 16-битового уникода (UTF-16 BE (Big Endian) и UTF-16 LE (Little Endian)), которые и поддерживаются самим флэш-плеером. Это удобно, но при одном условии, что, задавая, например, внутри программы шрифты, вы должны знать, что далеко не все из них могут поддерживать русский язык. Если не ошибаюсь, из стандартных - только четыре. Это же касается и других языков. Многоязыковую поддержку своим приложениям (это я забегаю вперед) можно сделать очень просто, используя текстовые файлы либо XML.

А что самое интересное вы можете увидеть в ActionScript, так это возможности задания имен для переменных и функций на любом языке, то есть и на русском в том числе. Например:

var АБВГД = "Привет!";
trace (АБВГД); //выведет Привет!

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


Boolean

"Логика" в программировании, по-моему, уже давно не претерпевает никаких изменений. Их нет и здесь, все стандартно - старые добрые true и false. Хотя, не совсем:), в ActionScript их можно заменить на "1" и "0", в обоих случаях написания ошибки для ActionScript не будет. В операциях сравнения используются стандартные "==", "!=", ">", "<", плюс логика "&&", "||", "!".


Почему true и false - это одно и то же, что "1" и "0"?

Это важный вопрос:). Сделано все для облегчения написания кода, конечно же. Элементарные типы способны взаимодействовать между собой на автоматическом уровне. Поэтому часто очень удобно, когда false всегда преобразуется в 0, а true - в 1. Например, вместо того, чтобы громоздить код "если Вася пришел, то у нас появилось 8 яблок, а иначе яблок не было бы вообще", а "Вася" - это логическая переменная, можно написать:

trace(Вася*8+"яблок");

Все будет работать.

Наберите одну строку кода:

trace (false-true); // выводит: -1

или же

trace (1+2*true); //выводит: 3

Данный код демонстрирует следующее. Если мы говорим о случаях, когда выявляется несоответствие между фактическим и ожидаемым типами аргумента для операции, тип переданного аргумента будет приведен к приемлемому для данной операции.

То есть, в любом случае элементарные типы способны взаимодействовать между собой согласно заложенной в стандарте логики, поэтому во избежание ошибок переменные иногда требуется задавать явно или же использовать функции преобразования из одного типа в другой. А так false при исполнении кода всегда будет преобразована в 0, а true - в единицу.

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

A="12";
B=2+A;
trace (B);
B=2-A;
trace (B);

На исполнении вы получите два ответа: "212" и... "-10". То есть, в первом случае произошла конкатенация (сложение строк), а во втором - математическая операция. Это очень важно понимать при программировании. То есть автоматизация и выгодна, и может скрывать под собой некоторые подводные камни.


В завершение

Тут мне написали фразу типа: "Ты бы еще по С++ территорию в "КВ" начал...". Нет, ActionScript2 очень легок в освоении, по крайней мере, не сложнее того же Бейсика, при этом открывает большие возможности, позволяет работать с новыми технологиями, учит структуре современных сред разработки и архитектуре создания современных приложений. То есть, на самом деле я бы рекомендовал его для изучения тем, кто хочет начать программировать. А то пишут, что для изучения этого скрипта необходимо подробное знание ООП, С++ либо Java плюс технологии XML, HTML, CSS и т.п. Нет, здесь все гораздо проще и быстро в освоении. То есть, особенных предварительных навыков и не нужно.

(Продолжение следует)

Кристофер,
christopher@tut.by

Версия для печатиВерсия для печати

Номер: 

12 за 2007 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!