Сегодня: Пятница, 26.04.2024, 19:21 (МСК)| Здравствуйте, Гость| Мой профиль | Регистрация | Вход | RSS

Популярно об ИИ.
Третий сезон

Спецэффекты в Cinema4D

Устройства с беспроводным питанием

Новинки в области цифровых камер

Плагины Sonnox Oxford
Главная » РАЗРАБОТКА КОМПЬЮТЕРНЫХ ИГР

Территория Flash. Основы ActionScript 2.0. Выпуск 2

30.07.2010
Поскольку эта серия рассчитана больше на начинающих, то и объяснять будем просто и немного сжато. Если захотите узнать обо всем поподробнее, то лучше пойти в библиотеку, купить книгу Гурского "Action Script 2.0. Программирование во Flash MX 2004" или пролистать курсы по 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». То есть, в первом случае произошла конкатенация (сложение строк), а во втором — математическая операция. Это очень важно понимать при программировании. То есть автоматизация и выгодна, и может скрывать под собой некоторые подводные камни. 

Кристофер

Перепечатка материалов или их фрагментов возможна только с согласия автора.







Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ассоциация боевых роботов
Рекомендуем...
Новости

Разделы

Опросы

Какой язык программирования вы считаете наиболее актуальным сегодня?
Всего ответов: 329

Друзья

3D-кино






Найти на сайте:








Об авторе       Контакты      Вопрос-ответ        Хостинг от uCoz