Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
В первой версии ActionScript вообще ООП не было. Были функции типа nextFrame() и gotoAndPlay(). А уже со второй появилось указание типа (только не как в сишном синтаксисе String x, а наоборот, как в паскалевском: var x: String). Или это ещё не статическая типизация, а просто хинт типа, как у аргументов функций в "PHP"?
Вика пишет про AS1: «Loose typing refers to the ability of a variable to hold any type of data».
Вика пишет про AS2: «ActionScript 2.0 featured compile-time type checking... With ActionScript 2.0, developers could constrain variables to a specific type by adding a type annotation so that type mismatch errors could be found at compile-time».
В AS3 поменяли виртуальную машину, так что байткод несовместим с AS2.
В общем, нужно посмотреть, что из себя представляет байткод AS2 и AS3, чтобы сделать вывод о типизации, и можно ли верит Вике, что она статическая.
*****
Как работает хинтинг в "PHP": если я напишу function MyFunc(int $x), то $x по-прежнему будет содержать всю метушню, которую требует динамическая типизация, но если передать на вход что-нибудь, не являющееся целым числом, сработает исключение. Т. е. в "PHP" это фактически assert.
Причем не по типу, а по возможности приведения. Например, функция от инта спокойно сожрёт явный стринг, в котором лежат цифры[1]. Что как бы делает эту фичу более или менее нахуй не нужной.
Ну то есть в "PHP" сделали, как всегда, и лучше солнце закатить вручную. Ну то есть, если нам нужен именно тип int, написать assert(is_int($i)), а если нужно проверить возможность приведения, то assert(is_numeric($i)). В любом случае проверки в компайлтайме не будет, что совсем плохо.
Следующий пример показывает, что в "PHP" проверка только в рантайме:
duplicate((string) "s"); // так падает, потому что передали выражение, неприводимое к числу
if(false) duplicate((string) "s"); // а так проглатывает, потому что во время исполнения вызова не было
— Римляне отняли у нас всё. И у наших отцов.
— И у отцов наших отцов.
— И у отцов отцов наших отцов.
— И у отцов отцов отцов наших отцов.
~ Житие Брайана по Монти Пайтону
https://ru.wikiquote.org/wiki/Житие_Брайана_по_Монти_Пайтону
https://ru.wikiquote.org/wiki/Монти_Пайтон_и_Священный_Грааль
Основная разница в том, что в "ActionScript" применяется статическая типизация, а в "JavaScript" -- динамическая.
Про "Flash Player" и "swf" слышал?
ого, да они опередили время:)
Чем хинтинг отличается от стат типизации? Тем, что опционален?
Вика пишет про AS2: «ActionScript 2.0 featured compile-time type checking... With ActionScript 2.0, developers could constrain variables to a specific type by adding a type annotation so that type mismatch errors could be found at compile-time».
В AS3 поменяли виртуальную машину, так что байткод несовместим с AS2.
В общем, нужно посмотреть, что из себя представляет байткод AS2 и AS3, чтобы сделать вывод о типизации, и можно ли верит Вике, что она статическая.
*****
Как работает хинтинг в "PHP": если я напишу function MyFunc(int $x), то $x по-прежнему будет содержать всю метушню, которую требует динамическая типизация, но если передать на вход что-нибудь, не являющееся целым числом, сработает исключение. Т. е. в "PHP" это фактически assert.
Причем не по типу, а по возможности приведения. Например, функция от инта спокойно сожрёт явный стринг, в котором лежат цифры[1]. Что как бы делает эту фичу более или менее нахуй не нужной.
[1] — https://ideone.com/bxkXY4
Следующий пример показывает, что в "PHP" проверка только в рантайме: