Бесплатно скачать Adobe Flash Player

Введение в ActionScript 2.0 для пользователей ActionScript 1.0: Часть Первая

Если вы привыкли работать с Flash ActionScript, появление ActionScript 2.0 может хорошо вас встряхнуть). Конечно, есть некоторое возбуждение от новых возможностей, появившихся в ActionScript 2.0. В конце концов, 2.0 должно быть лучше, чем 1.0, так? С другой стороны, перспектива изучения нового синтаксиса и новых особенностей языка может несколько охладить пыл первооткрывателя ) В этой статье мы будем рассеивать страхи по поводу ActionScript 2.0.

Начнем с терминологии. ActionScript, на котором вы писали до этого во Flash 5 и Flash MX, теперь называется ActionScript 1.0.

ActionScript 2.0 — это новшество, появившееся в Flash MX 2004 и Flash MX Professional 2004, и по большей части это все тот же ActionScript 1.0. Это означает, что подавляющая часть ваших знаний в ActionScript 1.0 остается актуальной для ActionScript 2.0 (вздохи облегчения). Фактически, если Вы не писали свои классы в ActionScript, разница между ActionScript 1.0 и ActionScript 2.0 будет для вас довольно незначительной. Если вы фанат ActionScript 1.0, вы можете продолжать писать код на ActionScript 1.0. (Поймите, тем не менее, что смешивание ActionScript 1.0 с ActionScript 2.0 может дать нестабильный результат).

Основные отличия ActionScript 2.0 от ActionScript 1.0

  • Строгий контроль типов. Это означает, что теперь вы строго указывете тип данных при объявлении переменной, и после этого переменная может содержать данные только этого одного типа, указанного при объявлении переменной. Например, вы можете объявить переменную типа MovieClip, типа String, Color и т.д. Это также касается и параметров функций. Строгий контроль типов  — это важный шаг к практике хорошего программирования, это помогает убивать множество ошибок еще до их появления, например, пресекать частую в ActionScript 1.0 ошибку, когда в имени переменной вы вводите всего один неверный символ, а потом никак не можете заставить проект заработать;
  • Контроль типа возвращаемого функцией результата. Это похоже на строгий контроль типов. Если функция возвращает некую величину, Вы можете указать тип этой возвращаемой функцией величины. Если функция не будет возвращать никакого значения, тогда Вы можете указать, что функция ничего не возвращает. Это — еще одна возможность, помогающая избегать множества ошибок при кодировании, и это работает рука об руку со строгим контролем типов данных. Например, если Вы указываете, что функция возвращает значение типа String, а потом пытаетесь назначить это возвращенное значение переменной типа Number, то Flash выдаст ошибку;
  • Формальный синтаксис классов. Это, возможно, главная особенность ActionScript 2.0. В ActionScript 1.0 недостает формального синтаксиса классов, взамен используются прототипы. В ActionScript 2.0 реализована поддержка для членов класса, обладающих разными режимами доступа к ним: public (доступен из любого места), private (доступен только внутри класса) и static (это данные и методы, общие для всех объектов класса), а также реализовано полноценное наследование (inheritance) и интерфейсы (interfaces).

Если вы дочитали до этого места: сейчас мы рассмотрим все вышеперечисленное более подробно. Сначала — строгий контроль типов и контроль возвращаемого функцией результата. Затем — формальный синтаксис классов (во второй части).

Строгий контроль типов

Разработчики ActionScript долгое время страдали от беспредела с типами данных, я с другой стороны, честно говоря, были даже несколько избалованы этим. В ActionScript 1.0 вы можете объявить переменную, присвоить ей строковое значение, а затем ей же — числовое и т. п.:

var sProduct = "Flash MX 2004";
sProduct = 6;

Конечно, на таком простом примере ясно, что переменная должна иметь значения только одного типа. Переменная sProduct всегда должна содержать строки типа "Flash MX 2004" или "Dreamweaver MX 2004", но не число 6. Но если ваше приложение достаточно сложно, вы захотите полностью положиться на переменную, чтобы она всегда возвращала ожидаемый вами результат и сама проверяла тип своего значения при присваиваниях, ведь обращение к этой переменной может происходить в самых разных ситуациях, и вы не сможете (да и зачем это нужно) держать в своей голове их все. Например, если вы хотите отобразить значение sProduct, важно чтобы ее значение имело именно тип String, а не какой-либо другой. В этом есть определенный смысл!

Использование ActionScript 1.0 ведет к не самой лучшей практике программирования и к ошибкам, связанным с несоответствием типов данных. Вы тратили многие часы на отладку, просто чтобы найти строку кода, где переменной присваивалось значение неверного типа. Строгий контроль типов в ActionScript 2.0 производится во время компиляции (compile-time) (то есть до этапа выполнения). А значит, если вы случайно попытаетесь присвоить переменной значение неверного типа, то при проверке синтаксиса (она производится автоматически при публикации/экспорте), Flash выдаст сообщение об ошибке, указывая вам, где именно в коде произошел конфликт типов. Чтобы объявить переменную со строгим контролем типа, нужно использовать ключевое слово var, после которого следует имя переменной, затем — двоеточие и тип данных. Имена всех типов данных начинаются с заглавной буквы. Вот пример, где объявляется переменная sProduct типа String:

var sProduct:String = "Flash MX 2004";

После того, как sProduct была объявлена как String, попытка присвоить ей числовое значение приведет к ошибке. Например, если вы попробуете сделать так:

sProduct = 6;

То в окне Output увидите:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: Type mismatch in assignment statement: found Number where String is required.
sProduct = 6;

Total ActionScript Errors: 1 Reported Errors: 1

Важно: Используйте ключевое слово var только при первом объявлении переменной. Если попытаетесь затем использовать его еще раз с этой же переменной, Flash подумает, что вы объявляете новую переменную. И будет создана новая переменная с тем же самым именем, а оригинал будет перезаписан ею. Например:

var sProduct = 6;

Flash создаст новую переменную с именем sProduct. Новая переменная не будет проходить строгий контроль типов. А контроль типов для оригинальной переменной не будет проходить для новой переменной, так что вы даже не получите никакого сообщения об ошибке. Будьте внимательны с этим.

При использовании строгого контроля типов (далее — "контроль типов") вы получаете в помощники еще одну разновидность подсказок по коду (code hints) — это список возможных типов данных, он появляется после того, как вы введете двоеточие. Рис. 1 показывает это.


Рис. 1: подсказки кода при строгом контроле типов

Дополнительные плюсы контроля типов данных

Их как минимум два:

  • Контроль типов данных проясняет ваш код, облегчая его чтение как для вас, так и для других. Часто мы думаем, что всегда будем мыслить тем же образом, как и при написании кода, но оказывается, что это не так, когда мы начинаем читать собственный код по прошествии некоторого времени. Конечно, хорошие комментарии и правильные имена переменных очень важны, но контроль типов также помогает прояснять назначение конкретных переменных;
  • Использование контроля типов дает доступ к подсказкам по коду, и при этом не обязательно использовать специальные суффиксы в именах переменных.

Во Flash MX подсказки по коду были очень удобны, но нужно было всегда использовать правильные суффиксы, чтобы их получать. А с контролем типов в Flash MX 2004 вы можете получать эти подсказки, продолжая использовать ваш любимый способ именования переменных. Например, в данной статье используется модифицированная Венгерская нотация использующая одно-, дву-, и трехсимвольные префиксы в именах переменных. Например, мы использовали переменную sProduct. Префикс "s" указывает на то, что это переменная типа String. Конечно, Flash ничего об этом не знает. И не нужно, потому что тип переменной задан строго, и Flash в нужный момент выдаст правильную подсказку по коду. Вот пример с объявлением переменной, которая ссылается на объект Color. Затем, если я введу имя переменной и точку, появится подсказка по коду. Рис. 2 это демонстрирует.

Рис. 2: еще один пример подсказки по коду

Контоль типа возвращаемого функцией результата

В ActionScript 2.0 вы можете указать тип возвращаемого функциией результата. Это дает вам преимущество: теперь вы уверены, что придерживаетесь ваших собственных намерений и программируете последовательно в пределах вашего собственного кода. Чтобы задать тип возвращаемого результата, нужно после закрывающей скобки оператора вызова функции приписать двоеточие и тип данных. Синтаксис очень похож на тот, что используется при строгом контроле типов переменных. Вот пример, в котором тип возвращаемого функцией результата определяется как Number:

function multiply(nA:Number, nB:Number):Number {
  return (nA * nB);
}

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

trace(multiply(6, "Flash MX 2004"));

Выдаст такую ошибку (потому что второй параметр строковый, а должен быть числом):

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 5: Type mismatch.
trace(multiply(6, "Flash MX 2004"));

Total ActionScript Errors: 1 Reported Errors: 1

Вернемся к контролю типа возвращаемого значения. Это работает на вас двумя способами. Если вы забудете вернуть значение правильного типа, то Flash вам об этом скажет. Например, если вы напишете функцию multiply() вот так:

function multiply(nA:Number, nB:Number):Number {
  return "Flash MX 2004";
}

То получите ошибку типа:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: The expression returned must match the function's return type.
return "Flash MX 2004";

Total ActionScript Errors: 1 Reported Errors: 1

Потому что тип реально возвращаемого значения должен соответствовать заявленному типу.

Также, если вы попытаетесь назначить возвращаемое функцией значение некой переменной, Flash проверит, соответствуют ли типы переменной и возвращаемого значения. Например:

function multiply(nA:Number, nB:Number):Number {
  return (nA * nB);
}

var sProduct:String = multiply(6, 5);

В приведенном примере производится попытка присвоить переменной типа String возвращаемое функцией multiply() значение типа Number. Так как функция multiply() возвращает значение типа Number, Flash выдаст ошибку:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 5: Type mismatch in assignment statement: found Number where String is required.
var sProduct:String = multiply(6, 5);

Total ActionScript Errors: 1 Reported Errors: 1

Немного о преимуществах

Мы рассмотрели строгий контроль типов данных и контроль типа возвращаемого функцией результата в ActionScript 2.0. Программисты с опытом в языках, уже поддерживающих такие возможности (например, Java, C#, C++) и сами знают, в чем заключаются преимущества такого подхода. Но тем, кто не имеет такого опыта, может показаться, что вместо преимуществ они получают только новые проблемы и ограничения. Так в чем же состоят эти преимущества?

Выше мы уже упоминали о некоторых из них. Вот главные плюсы:

  • Уменьшение количества ошибок, связанных со (случайными) некорректными присваиваниями; это просто означает, что в случае допущения ошибки вы получите сообщения с указанием их места в коде еще на этапе компиляции, и вам не придется искать их самостоятельно по всему коду;
  • Код становится яснее и чище (как минимум — потенциально);
  • Помощь в освоении хороших практик программирования — а значит ваш профессиональный рост как разработчика. Смотришь и видишь — правильный человек код писал );
  • Вы получаете подсказки по коду без необходимости применять для этого суффиксы (при строгом контроле типов).

Важно отметить, что есть множество моментов, для которых не производится проверка на этапе компиляции. Мы видели пример такого момента, когда рассматривали строгий контроль типов — я о возможности перезаписи переменных при повторном объявлении с использованием ключевого слова var. Это нехорошо! Большaя часть языков, реализующих контроль типов, выдаст ошибку при попытке сделать такой трюк. Помните: Flash MX 2004 — это первый релиз с поддержкой ActionScript 2.0. Очевидно, мы увидим множество улучшений в будущих версиях (ага, типа ActionScript 3.0 — прим перев).

Вывод

Надеюсь, это введение в ActionScript 2.0 не напугало кого-либо из присутствующих). Во второй части мы рассмотрим формальный синтаксис классов в ActionScript 2.0.

Автор: Joey Lott (www.person13.com)

Полезно почитать также статью Евгения "John" Потапенко "НЕМНОГО О СЕДЬМОМ FLASH".

Писал: Rost, 9 Сентябрь 2003 21:03

Комментарии:

Ну наконец-то можно будет более-менее приемлемо программировать

ilya_cat - 10 Сентябрь 2003 9:13

Замечательно!
Это введение в ActionScript 2.0 меня не очень напугало :-). Так, а что насчёт синтаксиса классов?
Мне не терпится узнать то, что касается OOP в ActionScript 2.0 ;)

Вам желаю больших успехов :)

Sultan - 10 Сентябрь 2003 11:36

trace("ActionScript 1.0" == "Flash 5/MX ActionScript"); // Выводит: true

эта штука меня раздражает

valyard - 10 Сентябрь 2003 13:44

Меня тоже. Поэтому теперь этого больше нет.

Рост - 10 Сентябрь 2003 13:53

а меня это сильно напугало тк язык стал еще сложней а не особо разбираюсь в програмиирование таком кк си и джава

efim - 10 Сентябрь 2003 22:51

А где\когда вторая часть ;)?

Dolbyzerr - 12 Сентябрь 2003 11:16

Вторая часть будет сегодня, 12 Сентября 2003, вечером, часов в 21:00.

Рост - 12 Сентябрь 2003 12:04

В 21.00 по НАШЕМУ времени или по-москальскому? ;-)
А если серъёзно: в типе нумбер ограничивать разрядность мона или не мона? Сиречь, интеджер, лонг и всё такое. ИМХО, скорость ОЧЕНЬ зависит. Некоторые пересмотрят свою политику по размещении всей математики на сервере ;-0
И кстати, уже указанное разделение типов повышает скорострельность?

OtMaX - 12 Сентябрь 2003 12:40

немного не понял...
а как быть с передачей имен дублированных клипов.
по старому это
"name" + n
где n - есть номер клипа полученный в ходе вычислений...
получается что я не смогу обратиться:
this[Varclip]._x=200;
где Varclip получили методом присваивания
Varclip="name"+n;
или я туплю :)))

geo - 13 Сентябрь 2003 4:10

2geo:
тупишь))

это совсем другая опера)

asdAlive - 13 Сентябрь 2003 12:53

вобщем надо качать и смотреть самому, и все вопросы отпадут :)))

geo - 15 Сентябрь 2003 1:15

Синтаксис action script'а как мне показалось перемешан Pascal с C++ и с JavaScript. Но стало все же лучше чем раньше. Хотя уже скоро докачается вторые 50% и посмотрим, очень хочется более строгий язык программирования похожий на С++... Кстати а зачем им вообще велосипед нужно было изобретать, взяли бы стандартный язык и внедрили бы его синтаксис во Flash. И гибрида бы не получилось. И разработчикам было бы удобнее. Но это скорее всего связано с заморочками архитектуры флеша...

user1 - 4 Октябрь 2003 21:42

Круто!

TIM - 28 Октябрь 2003 23:17

a statьa pizata/я
bol/ьshoe xyuesosnoe
aФФtory

root - 9 Декабрь 2004 10:03

Я тут был, гыгы :)

uksus - 24 Декабрь 2004 14:06

какие тут все умные :)

отсос - 24 Декабрь 2004 14:12

Мммддааа... Чем дальше в лес тем больще дров...

dro - 29 Апрель 2005 12:18

Все замечательно но есть одно НО!
почему то в AS2.0
не работают некоторые команды system
например
System.useCodaPage=true
он выдаст ошибку...

FlyAgaric - 27 Сентябрь 2005 17:11



Подписаться на новости (RSS)




Примечания:
Статус документа
: в процессе
   2002-2009 Производство: Ростислав Сирык · О проекте · Подписка на новости (RSS)