Если вы привыкли работать с 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 может дать нестабильный результат).
MovieClip
String
Color
Number
public
private
static
Если вы дочитали до этого места: сейчас мы рассмотрим все вышеперечисленное более подробно. Сначала — строгий контроль типов и контроль возвращаемого функцией результата. Затем — формальный синтаксис классов (во второй части).
Конечно, на таком простом примере ясно, что переменная должна иметь значения только одного типа. Переменная sProduct всегда должна содержать строки типа "Flash MX 2004" или "Dreamweaver MX 2004", но не число 6. Но если ваше приложение достаточно сложно, вы захотите полностью положиться на переменную, чтобы она всегда возвращала ожидаемый вами результат и сама проверяла тип своего значения при присваиваниях, ведь обращение к этой переменной может происходить в самых разных ситуациях, и вы не сможете (да и зачем это нужно) держать в своей голове их все. Например, если вы хотите отобразить значение sProduct, важно чтобы ее значение имело именно тип String, а не какой-либо другой. В этом есть определенный смысл!
sProduct
"Flash MX 2004"
"Dreamweaver MX 2004"
6
Использование ActionScript 1.0 ведет к не самой лучшей практике программирования и к ошибкам, связанным с несоответствием типов данных. Вы тратили многие часы на отладку, просто чтобы найти строку кода, где переменной присваивалось значение неверного типа. Строгий контроль типов в ActionScript 2.0 производится во время компиляции (compile-time) (то есть до этапа выполнения). А значит, если вы случайно попытаетесь присвоить переменной значение неверного типа, то при проверке синтаксиса (она производится автоматически при публикации/экспорте), Flash выдаст сообщение об ошибке, указывая вам, где именно в коде произошел конфликт типов. Чтобы объявить переменную со строгим контролем типа, нужно использовать ключевое слово var, после которого следует имя переменной, затем — двоеточие и тип данных. Имена всех типов данных начинаются с заглавной буквы. Вот пример, где объявляется переменная sProduct типа String:
var
После того, как sProduct была объявлена как String, попытка присвоить ей числовое значение приведет к ошибке. Например, если вы попробуете сделать так:
То в окне 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 подумает, что вы объявляете новую переменную. И будет создана новая переменная с тем же самым именем, а оригинал будет перезаписан ею. Например:
Flash создаст новую переменную с именем sProduct. Новая переменная не будет проходить строгий контроль типов. А контроль типов для оригинальной переменной не будет проходить для новой переменной, так что вы даже не получите никакого сообщения об ошибке. Будьте внимательны с этим.
При использовании строгого контроля типов (далее — "контроль типов") вы получаете в помощники еще одну разновидность подсказок по коду (code hints) — это список возможных типов данных, он появляется после того, как вы введете двоеточие. Рис. 1 показывает это.
Рис. 1: подсказки кода при строгом контроле типов
Их как минимум два:
Во Flash MX подсказки по коду были очень удобны, но нужно было всегда использовать правильные суффиксы, чтобы их получать. А с контролем типов в Flash MX 2004 вы можете получать эти подсказки, продолжая использовать ваш любимый способ именования переменных. Например, в данной статье используется модифицированная Венгерская нотация использующая одно-, дву-, и трехсимвольные префиксы в именах переменных. Например, мы использовали переменную sProduct. Префикс "s" указывает на то, что это переменная типа String. Конечно, Flash ничего об этом не знает. И не нужно, потому что тип переменной задан строго, и Flash в нужный момент выдаст правильную подсказку по коду. Вот пример с объявлением переменной, которая ссылается на объект Color. Затем, если я введу имя переменной и точку, появится подсказка по коду. Рис. 2 это демонстрирует.
s
Рис. 2: еще один пример подсказки по коду
В ActionScript 2.0 вы можете указать тип возвращаемого функциией результата. Это дает вам преимущество: теперь вы уверены, что придерживаетесь ваших собственных намерений и программируете последовательно в пределах вашего собственного кода. Чтобы задать тип возвращаемого результата, нужно после закрывающей скобки оператора вызова функции приписать двоеточие и тип данных. Синтаксис очень похож на тот, что используется при строгом контроле типов переменных. Вот пример, в котором тип возвращаемого функцией результата определяется как Number:
Обратите внимание, что в этом примере также проводится контроль типов данных для входных параметров функции. Ведь параметры по существу являются переменными, и если вы попытаетесь присвоить им значение неверного типа при вызове функции, Flash сгенерирует ошибку. Например, следующий код:
Выдаст такую ошибку (потому что второй параметр строковый, а должен быть числом):
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 5: Type mismatch. trace(multiply(6, "Flash MX 2004"));
Вернемся к контролю типа возвращаемого значения. Это работает на вас двумя способами. Если вы забудете вернуть значение правильного типа, то Flash вам об этом скажет. Например, если вы напишете функцию multiply() вот так:
multiply()
То получите ошибку типа:
**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";
Потому что тип реально возвращаемого значения должен соответствовать заявленному типу.
Также, если вы попытаетесь назначить возвращаемое функцией значение некой переменной, 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);
Мы рассмотрели строгий контроль типов данных и контроль типа возвращаемого функцией результата в 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".
Ну наконец-то можно будет более-менее приемлемо программировать
Замечательно! Это введение в ActionScript 2.0 меня не очень напугало :-). Так, а что насчёт синтаксиса классов? Мне не терпится узнать то, что касается OOP в ActionScript 2.0 ;)
Вам желаю больших успехов :)
trace("ActionScript 1.0" == "Flash 5/MX ActionScript"); // Выводит: true
эта штука меня раздражает
Меня тоже. Поэтому теперь этого больше нет.
а меня это сильно напугало тк язык стал еще сложней а не особо разбираюсь в програмиирование таком кк си и джава
А где\когда вторая часть ;)?
Вторая часть будет сегодня, 12 Сентября 2003, вечером, часов в 21:00.
В 21.00 по НАШЕМУ времени или по-москальскому? ;-) А если серъёзно: в типе нумбер ограничивать разрядность мона или не мона? Сиречь, интеджер, лонг и всё такое. ИМХО, скорость ОЧЕНЬ зависит. Некоторые пересмотрят свою политику по размещении всей математики на сервере ;-0 И кстати, уже указанное разделение типов повышает скорострельность?
немного не понял... а как быть с передачей имен дублированных клипов. по старому это "name" + n где n - есть номер клипа полученный в ходе вычислений... получается что я не смогу обратиться: this[Varclip]._x=200; где Varclip получили методом присваивания Varclip="name"+n; или я туплю :)))
2geo: тупишь))
это совсем другая опера)
вобщем надо качать и смотреть самому, и все вопросы отпадут :)))
Синтаксис action script'а как мне показалось перемешан Pascal с C++ и с JavaScript. Но стало все же лучше чем раньше. Хотя уже скоро докачается вторые 50% и посмотрим, очень хочется более строгий язык программирования похожий на С++... Кстати а зачем им вообще велосипед нужно было изобретать, взяли бы стандартный язык и внедрили бы его синтаксис во Flash. И гибрида бы не получилось. И разработчикам было бы удобнее. Но это скорее всего связано с заморочками архитектуры флеша...
Круто!
a statьa pizata/я bol/ьshoe xyuesosnoe aФФtory
Я тут был, гыгы :)
какие тут все умные :)
Мммддааа... Чем дальше в лес тем больще дров...
Все замечательно но есть одно НО! почему то в AS2.0 не работают некоторые команды system например System.useCodaPage=true он выдаст ошибку...