# ActionScript

ActionScript é uma linguagem de script orientada a objetos baseada no ECMAScript, utilizada principalmente para construção de aplicações RIA (do inglês RIA: Rich Internet Applications (Aplicações Ricas de Internet)). É executada em uma máquina virtual (AVM - "ActionScript Virtual Machine"), atualmente na versão 3 que está disponível no Adobe Flash Player (plug-in encontrado em navegadores web) e também no ambiente Adobe AIR.

## A linguagem

Adobe ActionScript é uma linguagem de programação da plataforma Adobe Flash. Originalmente desenvolvida como um meio para os desenvolvedores programarem dinamicamente, melhorando a eficiência do desenvolvimento de aplicações na plataforma Flash, desde uma imagem simples a uma complexa animação.
Embora esteja na terceira versão, existem duas versões lançadas como ActionScript: as versões 1.0 e 2.0 (a versão 1.0 foi nomeada somente quando a versão 2.0 foi lançada).$^[$

### ActionScript 2.0

* Tipos em tempo de compilação e dinamicamente tipados em tempo de execução
* Orientação a objetos baseada em protótipos, novas classes criadas a partir da extensão de outras preexistentes
* Tipo primitivo numérico. Um apenas :Number, ponto flutuante com dupla precisão
Exemplo de ActionScript 2.0:

### ActionScript 3.0

Nesta versão foram introduzidos novos recursos como:
* Verificação de tipos em tempo de compilação e de execução: os tipos são agora preservados em tempo de execução. O Flash Player faz verificação de tipos no momento da execução. Estas informações de tipo também são utilizadas na máquina virtual para melhorar desempenho e reduzir uso de memória;
* Exceções em tempo de execução: Erros em tempo de execução disponibilizam estado da pilha ("stack traces") com indicação de arquivo fonte e número de linhas, como em Java, para rápida identificação de onde o erro foi gerado;
* Separação do sistema de herança de classes do sistema de herança de prototipação utilizado na versão anterior: Vários recursos que antes eram disponibilizados por funções de biblioteca foram incluídos na linguagem;
* Classes seladas: o comportamento padrão é que as classes não podem ser estendidas em tempo de execução, melhorando a alocação de memória e mantendo a aplicação mais segura. Classes dinâmicas podem ser utilizadas se definidas com o modificador dynamic;
* Suporte a pacotes (package), como em Java, namespaces;
* Métodos com clausura: as clausuras nos métodos guardam o estado dos objetos dos quais se originaram;
* A API do flash player foi reorganizada em packages;
* Sistema unificado de tratamento de eventos baseado no Document Object Model;
* Integração do ECMAScript para XML (chamada E4X). A antiga API, da versão 2.0, ainda existente;
* Acesso direto à lista de componentes do Flash em tempo de execução, permitindo controle completo em ActionScript;
* Implementação da especificação do ECMAScript (quarta edição);
* Expressões regulares: suporte nativo a expressões regulares;
* Novos tipos primitivos númericos: int (com sinal) e uint (sem sinal), ambos com 32 bits.
Exemplo de ActionScript 3.0:

## História

Desenvolvido pela empresa Macromedia, hoje controlado pela Adobe (que comprou a Macromedia em 2005), o ActionScript começou como uma linguagem de script para a ferramenta Macromedia Flash. As primeiras três versões das ferramentas Flash possuíam recursos de interatividade limitados. Os programadores podiam incluir comandos simples, chamados de "action", a um botão ou frame. O conjunto de ações era limitado a controles de navegação básicos, com comandos como "play", "stop", "getURL", e "gotoAndPlay".$^[$
Com a introdução do Flash 4 em 1999, o conjunto de ações foi incrementado e gerou uma linguagem de scripts. Novos recursos como variáveis, expressões, operadores diversos, blocos de condição ("if"), e loops foram adicionados. Apesar de ser chamado internamente de "ActionScript", o manual do Flash 4 e documentos de marketing continuaram a usar o termo "actions" para descrever a linguagem.$^[$

## Versões do Flash

* Flash Lite 1.0 e 1.1: Flash Lite tem foco em aplicações móveis e dispositivos eletrônicos. Flash Lite 1.1 utilizava Flash 4 ActionScript;
* Flash Lite 2.1: Suporte à versão 2 do ActionScript (Flash 7);
* Flash Player 2: Primeira versão com suporte a scripts, comandos incluíam gotoAndPlay, gotoAndStop, nextFrame e nextScene para controlo da timeline;
* Flash Player 3: Capacidade de carregar arquivos SWFs externos (loadMovie);
* Flash Player 4: Primeiro Flash com implementação completa da linguagem de scripts (chamadas de Actions). A linguagem possuía recursos como loops, condicionais (if), variáveis e outras construções de linguagem básicas;
* Flash Player 5: Primeira versão completa do ActionScript. Utilizava programação baseada em protótipos (classes) não disponível onde os objetos são clonados a partir de um protótipo ECMAScript. Disponibilizava completa linguagem de programação que podia ser utilizada de forma procedural ou orientada a objetos;
* Flash Player 6: Modelo para tratamento de eventos adicionado, suporte a seleção múltipla (switch);
* Flash Player 7: Incluiu suporte ao CSS e melhoria no desempenho de execução. Compiladores foram disponibilizados juntamente com o Flash Player 7, com possibilidade de traduzir ActionScript 2.0 e incluir também suporte a definição de classes com base no ECMAScript 4. Adicionalmente, o ActionScript 2.0 também podia ser compilado para ActionScript 1.0 byte-code, portanto compatível com o Flash Player 6;
* Flash Player 8: Mais recursos adicionados ao ActionScript 2.0, como nova biblioteca de classes e nova funções de API;
* Flash Player 9 (inicialmente chamado 8.5): ActionScript 3.0 introduzido, bem como uma nova máquina virtual chamada de AVM2 (ActionScript Virtual Machine 2). A AVM 2 coexiste com a versão anterior para fornecer compatibilidade a todas as versões do ActionScript no Flash Player 9. Melhoria do desempenho foi alcançada com um novo compilador JIT ("Just In Time"). Agora chamado de Adobe Flash Player.

## Versões do ActionScript
### 2000–2003 - ActionScript 1.0

Lançadas com a versão 5 do Flash em setembro de 2000, as actions do Flash 4 foram incrementadas e passaram a ser chamadas de ActionScript pela primeira vez. O nome "ActionScript 1.0" foi adotado apenas depois da introdução do ActionScript 2.0. Tinha influência do JavaScript e do padrão ECMA-262 (terceira edição).$^[$

### 2003–2006 - ActionScript 2.0

Na versão 2.0, introduzida em setembro de 2003 com o lançamento do Flash MX 2004 e do Flash Player 7. Introduziu verificação de tipos e classes e herança. Esta versão seguia o padrão ECMAScript (quarta edição), mas apenas parcialmente.$^[$

### 2006–atual - ActionScript 3.0

Lançado em junho de 2006, a versão 3.0 do ActionScript foi lançada em conjunto com o ambiente de desenvolvimento Adobe Flex 2.0 e o Flash Player 9. Uma reestruturação da linguagem com uma nova máquina virtual.$^[$