Каково объяснение нетипизированных переменных в ActionScript 3?

Существует заводная рукоятка на Google Code. Я еще не попробовал его, но это выглядит многообещающим.

5
задан Owais Qureshi 7 March 2013 в 10:38
поделиться

6 ответов

Простой ответ на ваш вопрос заключается в том, что спецификация ActionScript3 была основана на черновиках предложений для ECMAScript, 4-й ревизии, и в этих черновиках указывается, что данные могут быть нетипизированными. Итак, AS3 позволяет нетипизировать данные. Что касается обоснования , я бы сказал, что это почти наверняка некоторая комбинация обеспечения обратной совместимости с кодом ECMA-3 и доступности для программистов, привыкших к необязательной типизации редакции 3. Но только авторы проекта ECMA могли ответить на этот вопрос, и он несколько ортогонален тому, о чем вы спрашиваете.

В любом случае ответ на вопрос, почему ActionScript3 включает нетипизированные переменные, заключается в том, что предложение, на котором он был основан включены нетипизированные переменные. Я понятия не имею, откуда берутся другие ответы, особенно те, которые подразумевают, что эта функция предназначена для удобства программистов AS2 или людей, не готовых к "настоящему языку". Если Macromedia / Adobe отклонились от предложений ECMA по какой-либо конкретной функции, было бы разумно предположить, что они сделали это по таким причинам, но рассматриваемая функция реализована в соответствии с предложениями.

3
ответ дан 14 December 2019 в 13:41
поделиться

ActionScript, как и JavaScript, основан на спецификации ECMAScript. В ECMAScript все переменные не типизированы - это динамически (и слабо) типизированный язык. Фактически, система статических типов AS, представленная в AS2, является дополнением Macromedia - нетипизированные переменные существовали всегда.

Лично я считаю преимущества добавления системы статических типов несколько сомнительными, но неопределенное значение, несомненно, является одним из величайших провалов ECMAScript. Доступ к несуществующему свойству объекта не вызывает ошибки, он просто возвращает неопределенное значение. Однако попытка получить доступ к свойству с неопределенным значением вызывает ошибку - отличный способ показать ваши ошибки далеко от того места, где вы их сделали!

3
ответ дан 14 December 2019 в 13:41
поделиться

В дополнение к сказанному Огги:

Раньше, во времена AS1 (и даже AS2), основными пользователями языка были флэш-дизайнеры, не имевшие глубокого опыта программирования. . Так что им было бы полезно не беспокоиться о вводе / преобразовании.

Нетипизированные массивы, динамические классы (например, Object и Array), в которых вы можете добавить новое свойство к объекту после его создания, являются еще одним примером языковых конструкций, которые обычные (строго типизированные) программисты могут найти неудобными.

Последняя версия языка (AS3) сохраняет некоторые из этих функций (возможно, для обратной совместимости и / или для того, чтобы оставаться простым языком для дизайнеров).

0
ответ дан 14 December 2019 в 13:41
поделиться

Я использую их там, где мне нужно что-то общее. ActionScript не позволяет создавать универсальные шаблоны (хотя новый тип Vector в значительной степени является универсальным).

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

0
ответ дан 14 December 2019 в 13:41
поделиться

ActionScript является расширением очень старого версия java-скрипта. В какой-то момент каждый разрабатывал свою одну версию java-скрипта. Только две основные версии вошли в общее использование

  • Jscript / java-script от netscape использовался всеми веб-браузерами
  • ActionScript используется во флэш-памяти и т.д.

Ключевое слово «var» является частью jscript, поэтому он есть в ActionScript.

Я думаю, что в ActionScript2 ключевое слово var было ограничено объектами как часть попытки придать ActionScript более сильную (более статичную) систему типов. ActionScript3 пытается быть больше похожим на ECMAScript, чтобы у программистов jscript было меньше проблем с его использованием, поэтому ActionScript3 определил «var» (и нетипизированную переменную), как это делает jscript.

В jscript есть много очень странных вещей, он просто не похож на любой другой язык в основном потоке, из-за истории ] В ActionScript тоже много этих странных мыслей.

ActionScript тянется в двух направлениях: одна группа людей хочет, чтобы он был похож на jscript, другая группа людей хочет, чтобы это был лучший язык, на котором он может быть это собственное право. Между тем, многим разработчикам приходится время от времени им пользоваться и сильно запутывать.

(Следовательно, некоторые разработчики смотрят на Silverlight только потому, что он использует C # / VB.NET, который они уже знают. История расскажет нам, как это будет через 10 лет…)

См. Также

0
ответ дан 14 December 2019 в 13:41
поделиться

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

Во-вторых, в настоящее время я работаю над проект, который динамически создает экземпляры классов с помощью getDefinitionByName ().

Например: Каждый раздел веб-сайта, над которым я работаю, имеет свой собственный класс, связанный с ним. Теперь, насколько мне известно, я мог бы создать очень избыточный случай коммутатора, который проверяет, в какой раздел вы переходите, а затем создайте экземпляр этого класса, используя переменную, введенную для каждого раздела. ИЛИ, я мог бы создать одну переменную sectionClass, которая динамически становится подходящим классом раздела каждый раз, когда раздел изменяется.

Это случай, когда строгая типизация переменной, такой как sectionClass, кажется невозможной (о чем я скромно знаю) и почему Мне нравится вариант нетипизированных переменных.

Уловка в том, что даже с getDefinitionByName () вам нужно в любом случае объявить переменную по типу для каждого класса, чтобы включить их во Flash AVM (виртуальная машина ActionScript) ; P

0
ответ дан 14 December 2019 в 13:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: