You are on page 1of 95

c 

  


 
 
 

  

A linguagem ActionScript é um linguagem orientada por objectos utilizada principalmente na criação de


RIAs ʹ Rich Internet Application. As RIAs são aplicacções executada num browser e proporcionam uma
interface gráfica multimédia ao utilizador semelhante a que estes podem utilizar em aplicacções
executadas em sistemas operativos cliente.

A linguagem ActionScript, desenvolvida pela Macromedia , é hoje uma linguagem proprietária da Adobe
baseada no standard ECMAScript. h  é uma linguagem de programação baseada em  ,
padronizada pela Ecma International na especificação ECMA-262.

A linguagem ActionScript, actualmente na sua terceira versão,é executada em uma máquina virtual (AVM
- "ActionScript Virtual Machine"), contida no plug-in Flash que pode ser adicionado a qualquer .

ÿ - ActionScript 3.0 pode ser escrito e compilado de várias formas, inclusive:


ÿ Com o uso do ambiente de desenvolvimento do Adobe Flex Builder 3
ÿ Com o uso de qualquer editor de texto e um compilador de linha de comando, como aquele
fornecido com o FlexBuilder 3
ÿ Com o uso da ferramenta de autoria do Adobe Flash CS4 Professional

h  


  

Segue-se uma descrição detalhada dos editores e ferramentas onde pode ser utilizada a linguagem
ActionScript:




Além de seus recursos gráficos e de criação de animacções, o Adobe Flash CS4 Professional inclui
ferramentas paratrabalhar com códigos do ActionScript, anexados a elementos em um arquivo FLA ou em
arquivos externos,exclusivos do ActionScript. A ferramenta de autoria do Flash é ideal para projetos que
envolvem grande quantidadede animação ou vídeo, ou quando você deseja criar a maior parte dos ativos
gráficos sozinho, especialmente projectos com uma interação mínima do usuário ou funcionalidade que
exija o ActionScript.

-utro motivo para escolher essaferramenta ao desenvolver projetos do ActionScript é caso prefira criar
ativos visuais e escrever código no mesmoaplicativo. Você também pode usar a autoria do Flash se quiser
usar componentes da interface do usuário pré-criados,mas com um SWF menor ou uma atribuição de
capa visual mais fácil são prioridades essenciais para seu projeto.

- Adobe Flash CS4 Professional inclui duas ferramentas para escrever códigos do ActionScript:

ÿ Painel Acções: disponível para trabalhar em um arquivo FLA, este painel permite escrever código
do ActionScript anexado a quadros em uma linha de tempo.

ÿ anela Script: a janela Script é um editor de texto dedicado para trabalhar com arquivos de código
do ActionScript.
   

- Adobe Flex Builder é a principal ferramenta para criar projetos com a estrutura do Flex. Além do layout
visual e das ferramentas de edição de MXML, o Flex Builder também inclui um editor do ActionScript, por
isso ele pode ser usado para criar projetos do Flex ou somente ActionScript. -s aplicativos do Flex
possuem várias vantagens, incluindo um rico conjunto de controles pré-criados da interface do usuário,
controles flexíveis de layout dinâmico e mecanismos embutidos para trabalhar com fontes de dados
externas e vincular dados externos a elementos da interface do usuário.

Entretanto, por causa do código adicional necessário para fornecer esses recursos, os aplicativos do Flex
podem ter um arquivo SWF maior e não podem ser completamente encapados com tanta facilidade
quanto seus equivalentes do Flash.

Use o Flex Builder se estiver criando aplicativos da Internet avançados, orientados a dados e cheios de
recursos com o Flex e quiser editar código do ActionScript, código MXML e criar o layout do aplicativo
visualmente, tudo com uma única ferramenta.


 
 

Como os arquivos do ActionScript (.as) são armazenados como arquivos de texto simples, qualquer
programa capaz de editar arquivos de texto sem formatação pode ser usado para escrever arquivos do
ActionScript. Além dos produtos do ActionScript da Adobe, foram criados diversos programas de edição
de texto de terceiros com recursos específicos do ActionScript.

Você pode escrever um arquivo MXML ou classes do ActionScript usando qualquer programa de editor de
texto. É possível, então, criar um aplicativo SWF (um aplicativo do Flex ou somente ActionScript) a partir
desses arquivos usando o SDK do Flex, que inclui as classes de estrutura do Flex, além do compilador do
Flex.

-pcionalmente, muitos desenvolvedores usam um editor do ActionScript de terceiros para escrever


classes do

ActionScript, junto com a ferramenta de autoria do Flash para criar conteúdo gráfico.

Você pode optar por usar um editor do ActionScript de terceiros se:

ÿ Preferir escrever código do ActionScript em um programa separado junto com a criação de


elementos visuais no Flash.
ÿ Usar um aplicativo para programação que não seja do ActionScript (como criação de páginas
HTML ou de aplicativos em outra linguagem de programação) e quiser usar o mesmo aplicativo
para o código do ActionScript também.
ÿ uiser criar projetos do Flex ou somente ActionScript usando o SDK do Flex sem o Flash ou o Flex
Builder.

h    
  
  
Selecione Arquivo > Novo.

Na caixa de diálogo Novo documento, selecione Documento Flash e clique em -K.

Uma nova janela do Flash será exibida.

Selecione Arquivo > Salvar. Selecione uma pasta que contenha o arquivo de classe Greeter.as, chame o
documentoFlash de â  e clique em -K.

Na paleta Ferramentas do Flash, selecione a ferramenta Texto e arraste até o Palco para definir um
novo campo detexto, com aproximadamente 300 pixels de largura e 100 de altura.

No painel Propriedades, com o campo de texto ainda selecionado no Palco, defina o tipo de texto como
"Textodinâmico" e digite á
 como o nome de ocorrência do campo de texto.

^Clique no primeiro quadro da linha de tempo principal.

No painel Acções, digite o seguinte script:

ð  
  

 
   

öSalve o arquivo.



  
 

Em primeiro lugar, é bom saber o que é um programa de computador e o que ele faz. Um programa de
computador consiste em dois aspectos principais:

$ Ele é uma série de instruções ou etapas que o computador deve executar.

$ Cada etapa envolve a manipulação de algumas informacções ou dados.

Em termos gerais, um programa de computador é apenas uma série de comandos passo a passo que você
fornece ao computador e ele executa. Cada comando é conhecido como  
. Como você verá neste
manual, no ActionScript, cada instrução é escrita com um ponto-e-vírgula no final.

Em essência, tudo o que uma determinada instrução faz em um programa é manipular alguns dados que
estão armazenados na memória do computador. Em um caso simples, você pode instruir o computador a
adicionar dois números e armazenar o resultado na memória. Em um caso mais complexo, imagine que
existe um desenho de um retângulo em um lugar na tela e você quer escrever um programa a fim de
movê-lo para outro lugar. - computador está mantendo controle de determinadas informacções sobre o
retângulo (as coordenadas x, y nas quais ele está localizado, sua largura, altura, cor etc.). Cada uma
dessas informacções está armazenada em um local na memória do
computador.Umprogramaquemoveoretânguloparaumlocaldiferentedeveteretapascomo"alteraracoorden
ada
xpara200;alteraracoordenadaypara150"(ouseja,deveespecificarnovosvaloresaseremusadosparaascoorde
nadas
xey).Éclaroqueocomputadorfazalgumacoisacomessesdadospararealmentetransformarosnúmerosnaimage
m
queaparecenatela;mas,paraoníveldedetalhequenosinteressa,bastasaberqueoprocessode"moverumretâng
ulo na tela", na verdade, implica em alterar alguns dados na memória do computador.

Π



Como a programação envolve principalmente a alteração de algumas informacções na memória do


computador, é preciso encontrar um meio de representar uma informação isolada no programa.
Umað  ðé um nome que representa um valor na memória do computador. Durante a escrita de
instruções para manipular valores, o nome da variável é escrito no lugar do valor; sempre que se deparar
com o nome da variável no seu programa, o computador
consultaráamemóriaeusaráovalorqueencontrarnela.Porexemplo,sevocêtiverduasvariáveischamadasð 
e ð , cada uma contendo um número, para adicionar esses dois números, você pode escrever a
instrução:

ð ð 

uando executar as etapas, o computador verificará os valores de cada variável e os adicionará juntos.

No ActionScript 3.0, uma variável consiste em três partes diferentes:

$ - nome da variável

$ - tipo de dados que pode ser armazenado nela

$ - valor real armazenado na memória do computador

Acabamos de ver como o computador usa o nome como alocador de espaço para o valor. - tipo de dados
também é
importante.DuranteacriaçãodeumavariávelnoActionScript,vocêespecificaotipodedadosqueelaconterá;apa
rtir daí, as instruções do programa só podem armazenar esse tipo de dados na variável, e você pode
manipular o valor usando as características específicas associadas a esse tipo de dados. No ActionScript, a
criação de uma variável (conhecida como O   a variável) requer o uso da instrução ð :

ð ð 
Nesse caso, instruímos o computador a criar uma variável chamadað , que contém apenas dados
Number (͞Number͟ é um tipo de dados específico definido no ActionScript). Você também pode
armazenar um valor na variável imediatamente:

ð ð  

NoAdobeFlashCS4Professional,existeoutromeiodedeclararumavariável.Duranteacolocaçãodeumsímbolod
e clipe de filme, símbolo de botão ou campo de texto no Palco, você pode lhe dar um nome de ocorrência
no Inspetor
depropriedades.Porbaixodopano,oFlashcriaumavariávelcomomesmonomequeonomedeocorrência,quevo

podeusarnocódigodoActionScriptparafazerreferênciaaesseitemdoPalco.Assim,porexemplo,sevocêderaum
símbolo de clipe de filme no Palco o nome de ocorrência  !", sempre que usar a variável
 !"no código do ActionScript, na verdade, estará manipulando esse clipe de filme.

Umaconstanteémuitosemelhanteaumavariávelnosentidodequeéumnomequerepresentaumvalornamemó
ria do computador, com um tipo de dados específico. A diferença é que um valor só pode ser atribuído a
uma constante
umaúnicaveznoprocessamentodoaplicativodoActionScript.Assimqueéatribuído,ovalordaconstanteéomes
mo
emtodooaplicativo.Asintaxeparadeclararumaconstanteéamesmaqueparadeclararumavariável,excetoquev
ocê usa a palavra-chave 
em vez da palavra-chave ð :


 #$% &#'&(#% ))

Uma constante é útil para definir um valor que é usado em vários locais em um projeto e que não é
alterado sob
circunstânciasnormais.-usodeumaconstanteemvezdeumvalorliteraltornaocódigomaislegível.Porexemplo,
émaisfácilentenderafinalidadedeumalinhadecódigoquemultiplicaumpreçopela #$% &#'&(#%,comparado
aumalinhadecódigoquemultiplicaopreçopor)*).Alémdisso,seovalordefinidoporumaconstantetiverdeser
alteradoevocêusarumaconstantequerepresenteessevaloremtodooseuprojeto,bastaráalterarovaloremum
único lugar(adeclaraçãodaconstante),emvezdealterá-
loemvárioslocaiscomoaconteceriasevocêusassevaloresliterais codificados.

ù  

NoActionScript,háváriostiposdedadosquevocêpodeusarcomoostiposdedadosdavariávelquevocêcriar.Algu
ns deles podem ser entendidos como "simples" ou "fundamentais":
$ Seqüência de caracteres: um valor textual, como um nome ou o texto do capítulo de um livro

$ Numérico: o ActionScript 3.0 inclui três tipos de dados específicos para dados numéricos:

$ Número: qualquer valor numérico, incluindo valores com ou sem uma fração

$ int: um inteiro (um número inteiro sem uma fração)

$ uint: um inteiro "sem sinal", que significa um número inteiro que não pode ser negativo

$ Booleano: um valor do tipo verdadeiro ou falso, tal como se uma opção está ativa ou se dois valores
são iguais

-s tipos de dados simples representam uma única informação: por exemplo, um único número ou uma
única
seqüênciadetexto.Entretanto,amaioriadostiposdedadosdefinidosnoActionScriptpoderiaserdescritacomoti
pos de dados complexos, porque representam um conjunto de valores agrupados. Por exemplo, uma
variável com o tipo de dados Date representa um valor único: um momento no tempo. No entanto, esse
valor de data na verdade é representado com diversos valores: dia, mês, ano, horas, minutos, segundos
etc., que são todos números individuais.
Portanto,emborapensemosemumadatacomoumvalorúnico(eatratemosdessaforma,criandoumavariávelDa
te), internamente, o computador a entende como um grupo de diversos valores que, juntos, definem
uma única data.

Amaioriadostiposdedadosembutidos,bemcomoosdefinidospelosprogramadores,sãotiposdedadoscomplex
os. Alguns tipos de dados complexos que talvez você conheça são:

$ MovieClip: um símbolo de clipe de filme

$ TextField: um campo de texto de entrada ou dinâmico

$ SimpleButton: um símbolo de botão

$ Date: informacções sobre um momento único no tempo (uma data e hora)

Duas palavras que, em geral, são usadas como sinónimos de tipos de dados são classe e objecto. Uma
 é simplesmente a definição de um tipo de dados; é como um modelo para todos os objectos dos
tipos de dados, é como
dizer"todasasvariáveisdotipodedadosExampletêmestascaracterísticas:A,BeC͟.Um ,porém,éapenas
uma ocorrência real de uma classe; uma variável cujo tipo de dados é MovieClip poderia ser descrita
como um objecto MovieClip. Estas são formas diferentes de dizer a mesma coisa:

$ - tipo de dados da variável +  é Number.

$ A variável +  é uma ocorrência de Number.


$ A variável +  é um objecto Number.

$ A variável +  é uma ocorrência da classe Number.

ù  !   " 

- ActionScript é conhecido como uma linguagem de programação orientada a objectos. Programação


orientada a
objectosésimplesmenteumaabordagemdaprogramação,nadamaisdoqueumaformadeorganizarocódigoem
um programa, usando objectos.

Anteriormente, definimos um programa de computador como uma série de etapas ou instruções que o
computador executa. De forma conceitual, então, podemos imaginar um programa de computador como
uma longa lista de instruções. Entretanto, na programação orientada a objectos, as instruções do
programa são divididas em objectos diferentes, ou seja, o código é agrupado em blocos de
funcionalidade, de forma que tipos relacionados de funcionalidade ou partes relacionadas de informação
são agrupados em um único contêiner.

Naverdade,sevocêjátrabalhoucomsímbolosnoFlash,entãoestáacostumadoatrabalharcomobjectos.Imagine
que
vocêdefiniuumsímbolodeclipedefilme(digamosquesejaodesenhodeumretângulo)ecolocouumacópiadelen
o
Palco.Essesímbolodeclipedefilmetambémé(literalmente)umobjectonoActionScript;éumaocorrênciadaclas
se MovieClip.

Há diversas características do clipe de filme que você pode modificar. Por exemplo, quando ele é
selecionado, há
valoresquevocêpodealterarnoInspetordepropriedades,comoacoordenadax,sualarguraouváriosajustesdec
or,
comoalterarseualfa(transparência)ouaplicarumfiltrodesombra.-utrasferramentasdoFlashpermitemfazer
mais alteracções, como usar a ferramenta Transformação livre para girar o retângulo. Tudo o que é
possível fazer para modificar um símbolo de clipe de filme no ambiente de autoria do Flash também pode
ser feito no ActionScript, alterando as partes dos dados que são colocadas em um único pacote chamado
objecto MovieClip.

NaprogramaçãoorientadaaobjectosdoActionScript,hátrêstiposdecaracterísticasquequalquerclassepodeinc
luir:
$ Propriedades

$ Métodos

$ Eventos

untos, esses elementos ajudam a gerenciar as partes dos dados usadas pelo programa e a decidir quais
acções são executadas em uma determinada ordem.

‰ 

Uma propriedade representa uma das partes dos dados que são compactados em um objecto. Um
objecto de música pode ter propriedades chamadas e ; a classe MovieClip tem propriedades
como  
, , ,!e
"! .Aspropriedadessãotratadascomovariáveisindividuais;naverdade,elaspodemserentendidasapenasco
mo as variáveis "filho" contidas em um objecto.

Aseguir,apresentamosalgunsexemplosdecódigodoActionScriptqueusapropriedades.Estalinhadecódigomo
ve o MovieClip chamado - para 100 pixels na coordenada x:

-  ))

Este código usa a propriedade de rotação fazendo com que o MovieClip - gire para corresponder à
rotação do

MovieClip 
.:

-  


 
. 


Este código altera a escala horizontal do MovieClip - para que ele fique uma vez e meia maior do que
antes:

-  ' /

-bserveaestruturacomum:vocêusaumavariável(- ,
.)comoonomedoobjecto,seguidodeumpon
to
()e,depois,onomedapropriedade(, 
, ').-ponto,conhecidocomo O ,éusadopara
indicarquevocêestáacessandoumdoselementosfilhodeumobjecto.Aestruturainteirareunida,"nomedavariá
vel- ponto-
nomedapropriedade",éusadacomoumaúnicavariável,comoumnomeparaumúnicovalornamemóriado
computador.

þ   

Um áOé uma ação que pode ser executada por um objecto. Por exemplo, se você criou um símbolo
de clipe de filmenoFlashcomváriosquadros-
chaveeanimaçãoemsualinhadetempo,esseclipedefilmepodeserreproduzido, parar ou ser instruído a
mover o indicador de reprodução para um quadro específico.

Este código instrui o MovieClip chamado !0a iniciar a reprodução:

!0"  

EstalinhafazoMovieClipchamado!0pararareprodução(oindicadordereproduçãopára;écomopausar
um vídeo):

!0" 

Este código faz um MovieClip chamado !0mover o indicador de reprodução para o uadro 1 e
parar a reprodução (é como retroceder um vídeo):

!0.#
, "  

Como você pode ver, os métodos, assim como as propriedades, são acessados escrevendo o nome do
objecto (uma
variável),umpontoeonomedométodoseguidodeparênteses.-sparêntesessãoumaformadeindicarquevocêe
stá  á Oo método ou, em outras palavras, instruindo o objecto a executar aquela ação. Às vezes, os
valores (ou as
variáveis)sãocolocadosentreparênteses,comoumaformadepassaradianteinformacçõesadicionaisnecessári
aspara executar a ação. Esses valores são conhecidos como  áde método. Por exemplo, o
método .#
, " precisa saber para qual quadro deve ir, por isso requer um único parâmetro entre
parênteses. -utros métodos, como "  e" ,sãoauto-
explicativos,porissonãorequereminformacçõesextras.Noentanto,elesaindasãoescritos com parênteses.

Diferentemente das propriedades (e variáveis), os métodos não são usados como alocadores de espaço
de valor.
Entretanto,algunsmétodospodemexecutarcálculoseretornarumresultadoquepodeserusadocomoumavariá
vel. Por exemplo, o método  
. da classe Number converte o valor em sua representação de texto:
ð 
1   2

ð 1   
. 
1   
. 

Porexemplo,vocêusariaométodo 
. sequisesseexibirovalordeumavariávelNumberemumcampode
texto na tela. A propriedade da classe TextField (que representa o conteúdo real do texto exibido na
tela) é definida como uma String, por isso pode conter apenas valores de texto. Esta linha de código
converte o valor numérico na variável
1  em texto e faz com que apareça na tela, no objecto
TextField chamado   1" :

  1"  


1   
. 

h
 

Descrevemosumprogramadecomputadorcomoumasérieinstruçõesqueocomputadorexecutaemetapas.Alg
uns programas de computador simples consistem em nada mais do que algumas etapas que ele executa e
depois é encerrado. Entretanto, os programas do ActionScript são criados para continuar a execução e
esperar a entrada do
usuárioouaocorrênciadeoutrascoisas.-seventossãomecanismosquedeterminamquaisinstruçõesocomputa
dor executa em um determinado momento.

Basicamente, os ð são fenómeno s que acontecem, sobre os quais o ActionScript é informado e aos
quais pode
responder.Muitoseventosestãorelacionadosàinteraçãodousuário,comoquandoumusuárioclicaemumbotã
oou pressiona uma tecla no teclado, mas também há outros tipos. Por exemplo, se você usar o
ActionScript para carregar uma imagem externa, há um evento que poderá avisá-lo quando o
carregamento da imagem for concluído. Em essência, quando um programa ActionScript é executado, o
Adobe Flash Player e o Adobe AIR aguardam determinados eventos e, então, executam o código
ActionScript específico definido para esses eventos.

ù 
 
   

Atécnicaparaespecificardeterminadasacçõesquedevemserexecutadasemrespostaaeventosespecíficoséco
nhecida como   á Oð . Durante a escrita do código do ActionScript para executar o
tratamento de eventos, há três elementos importantes a serem identificados:

$
Aorigemdoevento:paraqualobjectooeventodeveráocorrer?Porexemplo,qualbotãoseráclicadoouqualobjec
to Loader está carregando a imagem? A origem do evento também é conhecida como O Oð ,
porque é o objecto para o qual o evento é destinado pelo Flash Player ou AIR (ou seja, onde o evento
realmente acontece).

$ -evento:oqueiráacontecer,aqualfenómeno
vocêdesejaresponder?Éimportanteidentificarisso,porquemuitos objectos accionam diversos eventos.

$ A resposta: qual ou quais etapas você deseja executar quando o evento acontecer?

Sempre que você escrever código do ActionScript para manipular eventos, ele deve incluir estes três
elementos, e o
códigodeveseguiraestruturabásica(oselementosemnegritosãoalocadoresdeespaçoquevocêpreencheconfo
rme o caso específico):

°

ð
("
 ð
34%ð
" ð,
5
66#
"°,
"
!ð
.!
7

ð
  ,,%ð
$
 %ð
"%+%&#8%*ð
("
 

Esse código faz duas coisas. Primeiro, ele define uma função, que é a forma de especificar as acções que
você deseja executar em resposta ao evento. Em seguida, o método ,,%ð
$
 do objecto de
origem é chamado basicamente inscrevendo a função do evento especificado para que, quando o evento
acontecer, as acções da função sejam executadas. Vejamos cada uma dessas partes com mais detalhes.

Uma°
forneceummeiodeagruparasacções,comumúniconome,queécomoumnomedeatalho,paraexec
utar as acções. Ela é idêntica a um método, exceto que não está necessariamente associada a uma classe
específica (na verdade, um método poderia ser definido como uma função associada a uma classe
específica). Durante a criação de uma função para tratamento de eventos, você deve escolher o nome da
função (chamada de ð
("
neste caso). Você também deve especificar um parâmetro (chamado
ð
34neste exemplo). A especificação de um
parâmetrodefunçãoécomodeclararumavariável,porissovocêtambémdeveindicarotipodedadosdoparâmetr
o. (Neste exemplo, o tipo de dados do parâmetro é %ð
".)

CadatipodeeventoquevocêdesejaescutaréassociadoaumaclassedoActionScript.-tipodedadosquevocêdefi
ne para o parâmetro de função é sempre a classe associada ao evento específico ao qual deseja
responder. Por exemplo,
umevento(acionadoquandoousuárioclicaemumitemcomomouse)éassociadoàclasseMouseEvent.Par
a escrever uma função de ouvinte para um evento , você define essa função com um parâmetro com
o tipo de
dadosMouseEvent.Finalmente,entrechaves(5...7),vocêescreveasinstruçõesquedesejaqueocomputadorexe
cute quando o evento ocorrer.

Depoisdeescreverafunçãodetratamentodeeventos,énecessárioinformaraoobjectodeorigemdeevento(oobj
ecto para o qual o evento acontece, por exemplo, o botão) que você deseja que a função seja chamada
quando o evento
ocorrer.Épossívelfazerissochamandoométodo ,,%ð
$
 desseobjecto(todososobjectosquepossu
em eventos também têm um método ,,%ð
$
 ). - método ,,%ð
$
 usa dois
parâmetros:

$
-primeiroéonomedoeventoespecíficoaoqualvocêdesejaresponder.Novamente,cadaeventoéafiliadoauma
classe específica, e essa classe terá um valor especial predefinido para cada evento (como se fosse o
próprio nome exclusivo do evento, que você deve usar para o primeiro parâmetro).

$ - segundo é o nome da função de resposta do evento. -bserve que um nome de função é escrito sem
parênteses quando transmitido como um parâmetro.

h     


 
 

Vejaaseguirumadescriçãopassoapassodoprocessoqueaconteceduranteacriaçãodeumouvintedeeventos.N
este caso, é um exemplo de criação de uma função de ouvinte que é chamada quando um
objecto9
é clicado.

- código real escrito pelo programador é o seguinte:


°

ð
("
 ð
8%ð
 ð,

5

66#
"°,
"
!ð
.!

7

9
 ,,%ð
$
 8%ð
:$;:<*ð
("
 

Apresentaremos a seguir o funcionamento desse código, quando executado no Flash Player. -


comportamento é o mesmo no Adobe AIR:

‘ uando o arquivo SWF é carregado, o Flash Player registra o fato de que há uma função chamada

ð
("
 .

Ê
Emseguida,oFlashPlayerexecutaocódigo(especificamente,aslinhasdecódigoquenãoestãocontidasemuma
função). Neste caso, é apenas uma linha de código: chamar o método ,,%ð
$
 no objecto de
origem do evento (chamado 9
) e transmitir a função ð
("
como um parâmetro.
Ô¢   9

   

   

 




  ,,%ð
$
  9
   ð
("
 
 
 
  


D Em algum momento, o usuário clica no objecto9


, acionando o evento (identificado como

8%ð
:$;:<no código).

Então, acontece o seguinte:

Ô- Flash Player cria um objecto, uma ocorrência da classe associada ao evento em questão (MouseEvent,
no exemplo citado). Para muitos eventos, essa será uma ocorrência da classe Event; para eventos do
mouse, será uma ocorrência de MouseEvent e, para outros eventos, será uma ocorrência da classe
associada a esse evento. Esse objecto criado é conhecido como o  Oð e contém
informações específicas sobre o evento que ocorreu: qual é o tipo de evento, onde ele ocorreu e outras
informações específicas de evento se aplicável.

—Em seguida, o Flash Player verifica a lista de ouvintes de eventos armazenada por 9
. Ele verifica
todas
essasfunções,chamandoumadecadavezetransmitindooobjectodeeventoparaafunçãocomoumparâmetro.
Como a função ð
("
 é um dos ouvintes de 9
, como parte desse processo, o Flash Player
chama a função ð
("
 .

puando a função ð


("
 é chamada, o código nela é executado e as acções especificadas são
realizadas.

h    
 
 

A seguir, mostramos alguns exemplos mais concretos de eventos para lhe dar uma idéia de alguns
elementos de eventos comuns e as possíveis variacções disponíveis durante a escrita do código de
tratamento de eventos:

$ Clicaremumbotãoparainiciarareproduçãodoclipedefilmeatual.Noexemploaseguir," 9
éonome
da ocorrência do botão, e !é um nome especial que significa ͞o objecto atual͟:

!" 
°

" 8ð ð
8%ð
 ð,

5

!"  

7

" 9
 ,,%ð
$
 8%ð
:$;:<*" 8ð 

$ Detectartiposemumcampodetexto:Nesteexemplo,
éumcampodetextodeentrada,e"

é um campo de texto dinâmico:

°

", 3" ð
%ð
 ð,

5

ð ",< 
. ð


" =>",=",<

7


 ,,%ð
$
 %ð
%'&;?@*", 3" 

$ Clicar em um botão para navegar em uma URL. Nesse caso, 


9
é o nome de ocorrência do
botão:

°

.#,  ð
8%ð
 ð,

5

ð  ,@($@($(- 
 @($(- =!"66  ,6= 

ð. @($ ,@($ 

7


9
 ,,%ð
$
 8%ð
:$;:<*.#,  

Ä    #
 " 

-bviamente,paraquevocêpossausarumobjectonoActionScript,primeiro,eledeveexistir.Umapartedacriação
de um objecto é declarar uma variável; porém, a declaração de uma variável só cria um lugar vazio na
memória do computador. Você deve atribuir um valor real à variável, isto é, criar um objecto e armazená-
lo na variável, antes de tentarusá-looumanipulá-
lo.-processodecriarumobjectoéconhecidocomo   oobjecto,emoutraspalavras, criar uma
ocorrência de uma classe específica.

ExisteumamaneirasimplesdecriarumaocorrênciadeobjectoquenãoenvolveoActionScript.NoFlash,quandov
ocê
colocaumsímbolodeclipedefilme,símbolodebotãooucampodetextonoPalcoelheatribuiumnomedeocorrênc
ia no Inspetor de propriedades, o Flash automaticamente declara uma variável com esse nome de
ocorrência, cria uma ocorrência de objecto e armazena o objecto na variável. Da mesma forma, quando
você usa a linguagem MXML para
criarumcomponentenoAdobeFlexBuilder(codificandoumatagMXMLoucolocandoocomponentenoeditorno
modoDesign)elheatribuiumaID(nomarkupMXMLounaexibiçãoPropriedadesdoFlex),essaIDsetornaonome
de uma variável do ActionScript, e uma ocorrência do componente é criada e armazenada nessa variável.

Entretanto,nemsemprevocêcriaráumobjectovisualmente.Tambémháváriasformasdecriarocorrênciasdeobj
ecto
usandosomenteoActionScript.Primeiro,comváriostiposdedadosdoActionScript,vocêpodecriarumaocorrên
cia usando uma   , um valor escrito diretamente no código do ActionScript. Eis alguns
exemplos:

$ Valor numérico literal (insere o número diretamente):

ð  A2

ð . ð;
.
 B/A

ð @

 

$ Valor da sequência de caracteres literal (envolve o texto com aspas duplas):

ð °  


. =.=

ð - 
. =
*! !-
=

$ Ú  




 
° 

ð 
C !9
 

ð " 
.3,9
 ° 
$ Valor Array literal (envolve uma lista de valores separados por vírgula entre colchetes):

ð  
#  D="
.=*==*= 
=*= 
=E

$ Valor XML literal (insere o XML diretamente):

ð "'8$ F"G

F° G ,F6° G

F  GCF6  G

F6"G

-ActionScripttambémdefineexpressõesliteraisparaostiposdedadosArray,RegExp,-bjecteFunction.

Para qualquer outro tipo de dados, para criar uma ocorrência de objecto, use o operador
 como o nome
da classe, desta forma:

ð  : 8ð:" 


 8ð:" 

ð !, 1  


 1  ))H**2 

-atodecriardeumobjectousandoooperador
 ,muitasvezes,édescritocomo͞chamaroconstrutordaclasse͟
Um  
é um método especial que é chamado como parte do processo de criar uma ocorrência de
uma classe. -bserve que, ao criar uma ocorrência dessa forma, você coloca parênteses depois do nome
da classe e, às vezes, especifica valores de parâmetro (duas acções que também são executadas ao
chamar um método).

-bserve que, mesmo para esses tipos de dados que permitem criar ocorrências usando uma expressão
literal, você ainda pode usar o operador
 para criar uma ocorrência de objecto. Por exemplo, as duas
linhas de código a seguir fazem exatamente a mesma coisa:

ð  HAA

ð  
  HAA 

Éimportantesefamiliarizarcomaformacomo
 Ä  á criaobjectos.Sefornecessáriocriarumaocorrênc
ia
dequalquertipodedadosActionScriptquenãotenhaumarepresentaçãovisual(enãopossasercriadacolocando
um item no Palco do Flash ou no modo Design do editor XML do Flex Builder), isso só será possível
criando o objecto diretamente no ActionScript pelo uso do operador
 .
NoFlashespecificamente,ooperador
 tambémpodeserusadoparacriarumaocorrênciadeumsímbolodeclip
e de filme que é definido na Biblioteca mas não é colocado no Palco.

Alémdedeclararvariáveis,criarocorrênciasdeobjectosemanipularobjectosusandosuaspropriedadesemétod
os,há outros blocos de construção que você precisa usar para criar um programa do ActionScript.

-   

-s  Osão símbolos (ou, ocasionalmente, palavras) essenciais que são usados para executar
cálculos. Eles são
muitousadosemoperacçõesmatemáticasetambémparacompararvalores.Comoregrageral,umoperadorusa
umou mais valores e "obtém" um único resultado. Por exemplo:

$ - operador de adição () adiciona dois valores, tendo como resultado um único número:

ð  AA

$ - operador de multiplicação (!) multiplica dois valores, tendo como resultado um único número:

ð 
.  !",3°$.!!",3°$.!

$
-operadordeigualdade( )comparasedoisvaloressãoiguais,tendocomoresultadoumúnicovalorverdadeiro
ou falso (booleano):

° , 3°C =C,


, = 

5

 3 ! 

7

Conforme mostrado aqui, o operador de igualdade e os outros operadores de "comparação", em geral,


são usados com a instrução °para determinar se algumas instruções devem ser executadas.
Ä 
  

Durante a escrita do ActionScript, muitas vezes, você desejará fazer anotacções, talvez para explicar como
algumas
linhasdecódigofuncionameporqueescolheuumadeterminadaopção.-s á  O Osãoumaferram
enta
quevocêpodeusarparaescreverumtextoqueocomputadordeveignorarnoseucódigo.-ActionScriptincluidois
tipos de comentários:

$
Comentáriodeumalinha:umcomentáriodeumalinhaécriadocolocandoduasbarrasemqualquerlugardeuma
linha. Tudo que vier depois das barras até o fim da linha será ignorado pelo computador:

66! 
I.
,!"ð  . )66 ! .)
,° 

$ Comentário de várias linhas: um comentário de várias linhas inclui um marcador de comentário inicial
(6!), o conteúdo do comentário e um marcador de comentário final (!6). Tudo entre os marcadores inicial
e final é ignorado pelo computador, independentemente do número de linhas que o comentário contém:

6!
!.!  
.,"
*"! ",
. ! 
"  °

,°" 

. 
°,

;

 *!
  .
,!"
!6

-utrousocomumdoscomentáriosé"desativar"temporariamenteumaoumaislinhasdecódigo,porexemplo,se
você
estivertestandoumaformadiferentedefazeralgooutentandodescobrirporqueumcódigodoActionScriptnãoe
stá funcionando conforme o esperado.

Ä    
Muitas vezes em um programa, você desejará repetir determinadas acções, executar apenas algumas e
outras não,
executaracçõesconformecondiçõesespecíficasetc.-  O°
éocontrolesobreasacçõesquesãoexecu
tadas. Há vários tipos de elementos de controle de fluxo disponíveis no ActionScript.

$ Funções: as funções são como atalhos: fornecem um meio de agrupar uma série de acções sob um
único nome e podem ser usadas para realizar cálculos. As funções são especialmente importantes para
tratar eventos, mas tambémsãousadascomoumaferramentageralparaagruparumasériedeinstruções.

$ Loops: as estruturas de loop permitem designar um conjunto de instruções que o computador


executará por um
determinadonúmerodevezesouatéquealgumacondiçãosejaalterada.Comfreqüência,osloopssãousadospar
a manipular vários itens relacionados, empregando uma variável cujo valor é alterado sempre que o
computador completa o loop.

$ Instruções condicionais: as instruções condicionais fornecem um meio de designar algumas instruções


que são executadas somente sob determinadas circunstâncias ou de fornecer conjuntos alternativos de
instruções para condições diferentes. - tipo mais comum de instrução condicional é a instrução °. A
instrução °verifica um
valorouumaexpressãoentreparênteses.Seovalorfor*aslinhasdecódigoentrechavessãoexecutadas;caso
contrário, elas são ignoradas. Por exemplo:

° .F) 

5

66! " 


.B .,



7

A parceira da instrução °, a instrução , permite designar instruções alternativas a serem executadas
caso a condição não seja :

° 
 = ,
= 
5
66, ,
 B
!
.*! 
. "

7

5
66,

B ,
 !
.
7

Ä " 
-s objectos são a base da linguagem do ActionScript 3.0, seus os blocos de construção fundamentais.
Cada variável
declarada,cadafunçãoescritaecadaocorrênciadeclassecriadaéumobjecto.PenseemumprogramadoActionSc
ript

3.0 como um grupo de objectos que realizam tarefas, respondem a eventos e se comunicam.

-sprogramadoresacostumadosà--P(Programaçãoorientadaaobjectos)emavaouC++podempensarnosobj
ectos como módulos que contêm dois tipos de membros: dados armazenados em variáveis ou
propriedades de membros e comportamento acessível por meio de métodos. - ActionScript 3.0 define
objectos de modo similar, com pequenas particularidades. No ActionScript 3.0, os objectos são apenas
conjuntos de propriedades. Essas propriedades são
contêineresquepodemmanternãoapenasdados,mastambémfunçõesououtrosobjectos.Seumafunçãoforan
exada a um objecto dessa forma, ela será chamada de método.
EmboraadefiniçãodoActionScript3.0possaparecerumpoucoestranhaaosprogramadorescomexperiênciaem
ava
ouC++,naprática,adefiniçãodostiposdeobjectocomclassesdoActionScript3.0ébastantesemelhanteàformac
omo as classes são definidas em ava ou C++. A distinção entre as duas definições de objecto é
importante ao discutir o modelo de objecto do ActionScript e outros tópicos avançados, mas, na maioria
das situações, o termoO O
significavariáveisdemembrodeclasse,enãométodos.AReferênciadoscomponentesedalinguagemdoActionS
cript

3.0, por exemplo, usa o termo O Opara se referir a variáveis ou propriedades getter-setter. Ela
usa o termo

á Opara se referir às funções que fazem parte de uma classe.

UmadiferençasutilentreasclassesnoActionScripteasclassesemavaouC++éque,noActionScript,asclassesnão
são apenas entidades abstratas. As classes do ActionScript são representadas por  O  que
armazenam
propriedadesemétodosdaclasse.Issopermiteousodetécnicasquepodemparecerestranhasaosprogramadore
sde ava e C++, como incluir instruções ou código executável no nível superior de uma classe ou um
pacote.

-utra diferença entre as classes do ActionScript e as de ava ou C++ é que toda classe do ActionScript tem
o que chamamos de  O. Nas versões anteriores do ActionScript, os objectos de
protótipo, vinculados em
O O,serviamcoletivamentecomoabasedetodaahierarquiadeherançadeclasses.NoActionSc
ript

3.0, contudo, os objectos de protótipo desempenham um papel secundário no sistema de herança.


Apesar disso, eles poderão ser úteis como uma alternativa às propriedades e aos métodos estáticos se
você quiser compartilhar uma propriedade e seu valor com todas as ocorrências de uma classe.
Anteriormente, os programadores de ActionScript avançados podiam manipular diretamente a cadeia de
protótipos com elementos de linguagem embutidos especiais. Agora que essa linguagem fornece uma
implementação mais
maduradeumainterfacedeprogramaçãobaseadaemclasses,muitosdesseselementosdelinguagemespeciais,
como

"e ð*nãofazemmaispartedalinguagem.Alémdisso,asotimizaçõesdomecanismodeherança
internoquefornecemelhoriasdedesempenhosignificativasnoFlashPlayerenoAdobeAIRimpedemoacessodir
eto ao mecanismo de herança.

NoActionScript3.0,cadaobjectoédefinidoporumaclasse.Umaclassepodeserentendidacomoummodeloouu
ma
cópiadeumtipodeobjecto.Asdefiniçõesdeclassepodemincluirvariáveiseconstantes,quemantêmvaloresded
ados, e métodos, que são funções de encapsulamento de comportamento vinculadas à classe. -s valores
armazenados em propriedades podem ser ð áðou outros objectos. -s valores primitivos são
números, seqüências de caracteres ou valores booleanos.

- ActionScript contém diversas classes embutidas que fazem parte da linguagem central. Algumas delas,
como
Number,BooleaneString,representamosvaloresprimitivosdisponíveisnoActionScript.-utrasclasses,comoAr
ray, Math e XML, definem objectos mais complexos.

Todas as classes, incorporadas ou definidas pelo usuário, derivam da classe -bject. Para os
programadores com experiência no ActionScript, é importante observar que o tipo de dados -bject não é
mais o tipo de dados padrão,
muitoemboratodasasoutrasclassesaindaderivemdessa.NoActionScript2.0,asduaslinhasdecódigoaseguirera
m equivalentes porque a falta de uma anotação de tipo significava que uma variável seria do tipo -bject:

ð 3434

ð 34

-ActionScript3.0,porém,apresentaoconceitodevariáveissemtipo,quepodemserdesignadasdestasduasform
as:

ð 34!
ð 34

Uma variável sem tipo não é igual a uma variável do tipo -bject. A principal diferença é que as variáveis
sem tipo podem manter o valor especial 
,°
,, enquanto que uma variável do tipo -bject não pode.

Vocêpodedefinirsuasprópriasclassesusandoapalavra-
chave .Aspropriedadesdeclassepodemserdeclaradas
detrêsformas:asconstantespodemserdefinidascomapalavra-
chave
,asvariáveissãodefinidascomapalavra-
chaveð easpropriedadesgetteresettersãodefinidasusandoosatributos.eemumadeclaraçãodemétod
o. -s métodos podem ser declarados com a palavra-chave °

.

Umaocorrênciadeumaclasseécriadausandoooperador
 .-exemploaseguircriaumaocorrênciadaclasseDat
e chamada 9!, .

ð 9!, 1  


 1  

- processo de criar as classes que serão usadas nos projetos pode parecer assustador. Entretanto, a parte
mais difícil da criação de uma classe é a tarefa de criá-la, identificando os métodos, as propriedades e os
eventos que ela incluirá.

- tópico de criação orientada a objectos é complexo; existem cargos totalmente dedicados ao estudo
acadêmico e à
práticaprofissionaldessadisciplina.Noentanto,apresentamosalgumassugestõesdeabordagensquepodemaj
udá-lo a começar.

‘
Pensenafunçãoqueasocorrênciasdessaclasseexercerãonoaplicativo.Emgeral,osobjectoscumpremumadest
as três funções:

$
-bjectodevalor:essesobjectosservembasicamentecomocontêineresdedados,istoé,elescostumamterdivers
as propriedadesemenosmétodos(ou,àsvezes,nenhummétodo).Emgeral,elessãorepresentaçõesdecódigode
itensdefinidosclaramente,comoumaclasseSong(representandoumaúnicamúsicadomundoreal)ouclasse
Playlist (representando um grupo conceitual de músicas) em um aplicativo de player de música.
$
-bjectodeexibição:sãoosobjectosquerealmenteaparecemnatela.Exemplosincluemelementosdainterfaced
o
usuáriocomoumalistasuspensaouexibiçãodestatus,elementosgráficoscomocriaturasemumvideogameetc.

$ Estrutura do aplicativo: esses objectos exercem uma ampla gama de funções de suporte na lógica ou
no processamento executados pelos aplicativos. Exemplos incluem um objecto que executa
determinados cálculos em uma simulação biológica, um que é responsável por sincronizar valores entre
um controle de mostrador e
umaexibiçãodevolumeemumaplicativodeplayerdemúsica,umquegerenciaasregrasemumvideogameou um
que carrega uma imagem salva em um aplicativo de desenho.

Ê Escolha a funcionalidade específica de que a classe precisará. -s diferentes tipos de funcionalidade,


em geral, se tornam métodos da classe.

D Se a classe for servir como um objecto de valor, decida quais dados as ocorrências incluirão. Esses itens
são bons candidatos para propriedades.

 Como a classe está sendo criada especificamente para seu projeto, o mais importante é fornecer a
funcionalidade de que o aplicativo precisa. Talvez ajude responder a estas questões:

$ ue informações o aplicativo irá armazenar, controlar e manipular? Decidir issoajuda a identificar os
objectos de valor e as propriedades que você deseja.

$
uaisconjuntosdeaçõesdeverãoserexecutados,porexemplo,quandooaplicativoforcarregadopelaprimeira
vez,umbotãoforclicado,umfilmeparardeserreproduzidoetc.?Essessãobonscandidatosparamétodos(ou
propriedades, se as "ações" envolverem apenas a alteração de valores individuais).

$ uais informações a classe deve saber para executar cada ação específica? Essas informações se
tornam os parâmetros do método.

$ Conformeoaplicativoexecutarseutrabalho,oquemudaránasuaclassequeoutraspartesdoaplicativodeverá
saber? Esses itens são bons candidatos para eventos.

ƒ Se houver um objecto existente semelhante àquele de que você precisa, mas que não tenha alguma
funcionalidade adicional que você deseja adicionar, considere a criação de uma subclasse (uma classe que
aproveite a
funcionalidadedeumaclasseexistente,emvezdedefinirtodasassuasprópriasfuncionalidades).Porexemplo,se
você quiser criar uma classe que seja um objecto visual na tela, pode usar o comportamento de um dos
objectos de exibição existentes (por exemplo, Sprite ou MovieClip) como base para sua classe. Nesse
caso, MovieClip (ou Sprite) seria a   , e sua classe estenderia essa classe.
h     

Depois de fazer um plano de criação para sua classe ou, pelo menos, ter uma idéia das informações sobre
as quais ela deverá ter controle e quais ações deverão ser executadas, a sintaxe real da escrita de uma
classe é bem direta.

Veja as etapas mínimas para criar sua própria classe do ActionScript:

‘ Abra um novo documento de texto, em um programa específico do ActionScript como o Flex Builder
ou o Flash,
emumaferramentadeprogramaçãogeralcomooDreamweaverouemqualquerprogramaquepermitatrabalha
r com documento de texto sem formatação.

Ê Insiraumaocorrênciade paradefinironomedaclasse.Paraisso,digiteaspalavras" ,onome da


classe e as chaves que envolverão o conteúdo da classe (as definições de método e propriedade). Por
exemplo:

" 8: 

5

7

Apalavra"indicaqueaclassepodeseracessadadequalqueroutrocódigo

D
Digiteumainstrução"  .paraindicaronomedopacotenoqualsuaclasseseencontrará.Asintaxeéapalavra
"  ., seguida do nome completo do pacote e das chaves (que envolverão o bloco da instrução ).
Por exemplo, o código na etapa anterior seria alterado da seguinte forma:

"  ."  .

5

" 8: 

5

7

 Defina cada propriedade na classe usando a instrução ð dentro do corpo da classe; a sintaxe é a
mesma usada para declarar qualquer variável (com a adição do modificador "). Por exemplo, a
adição destas linhas entre as chaves de definição da classe criará propriedades chamadas +  ,

+  e , +  :


"ð +   
. =,° ð =

"ð 
+   

"ð , +  1 

ƒ Defina cada método na classe usando a mesma sintaxe usada para definir uma função. Por exemplo:

$ Para criar um método 8!, , digite:

"°

8!, "   
.*"   ð,

5

66,!
. !"  

7

$ Paracriarumconstrutor(ométodoespecialqueéchamadocomopartedoprocessodecriarumaocorrênciade
uma classe), crie um método cujo nome corresponda exatamente ao nome da classe:

"°

8:  

5

66,°°
 ð °""

66
,! "!4+   =!J=, +   
 1  ))*/*
 

7

Sevocênãoincluirummétodoconstrutornaclasse,ocompiladorcriaráautomaticamenteumconstrutorvazio

(sem nenhum parâmetro e nenhuma instrução) na sua classe.

Há mais alguns elementos de classe que você pode definir, que são mais complexos.

$ Ysão um cruzamento especial entre um método e uma propriedade. Durante a escrita do


código para
definiraclasse,vocêescreveoassessorcomoummétodoparapoderexecutarváriasações(emvezdeapenasler
ou atribuir um valor, que é tudo o que você pode fazer ao definir uma propriedade). Entretanto, na
criação de uma ocorrência da classe, você trata o assessor como uma propriedade, usando apenas o
nome para ler ou atribuir o valor. $
-seventosnoActionScriptnãosãodefinidosusandoumasintaxeespecífica.Emvezdisso,vocêdefineeventos na
classe usando a funcionalidade da classe EventDispatcher para manter controle de ouvintes de evento e
notificá-los dos eventos.

h   $Ä      

Você pode criar arquivos de código do ActionScript externo com uma extensão .as usando o Flash, Flex
Builder, Dreamweaver ou qualquer editor de texto.

-ActionScript3.0podeserusadoemdiversosambientesdedesenvolvimentodeaplicativo,incluindoasferrame
ntas de autoria do Flash e o Flex Builder.

Esta seção apresenta as etapas de criação e de aprimoramento de um aplicativo ActionScript 3.0 simples
usando a
ferramentadeautoriadoFlashouoFlexBuilder.-aplicativoquevocêcriarapresentaráumpadrãosimplesparaus
ar arquivos externos de classe do ActionScript 3.0 nos aplicativos Flash e Flex. Esse padrão se aplicará a
todos os outros aplicativos de exemplo deste manual.

Ä      


  

Você deve ter uma idéia do aplicativo que deseja ter antes de começar a criá-lo.

A representação do seu design pode ser tão simples quanto o nome do aplicativo e uma breve instrução
de sua finalidade ou tão complicado quanto um conjunto de documentos de requisitos contendo vários
diagramas UML (Unified Modeling Language). Este manual não discute a disciplina do design de software
em detalhes, mas é importante ter em mente que ele é uma etapa essencial no desenvolvimento de
aplicativos do ActionScript.

NossoprimeiroexemplodeumaplicativodoActionScriptseráumaplicativo͞HelloWorld͟padrão,poisseudesign
é muito simples:

$ - aplicativo será chamado de HelloWorld.

$ Ele exibirá um único campo de texto contendo as palavras ͞Hello World!͟.

$
Paraserreutilizadofacilmente,eleusaráumaúnicaclasseorientadaaobjectos,chamadaGreeter,quepodeserus
ada de dentro de um documento Flash ou um aplicativo do Flex.
$ Depois de criar uma versão básica do aplicativo, você adicionará uma nova funcionalidade que exija do
usuário a inserção de um nome de usuário e faça o aplicativo verificar esse nome em relação ao uma lista
de usuários conhecidos.

Com essa definição concisa estabelecida, você pode começar a criar o aplicativo em si.

Ä    " % & '  

AinstruçãododesignparaoaplicativoHelloWorlddiziaqueseucódigodeveserfácildereutilizar.Comesseobjetiv
o em mente, o aplicativo usa uma única classe orientada a objectos, chamada Greeter, que é usada de
dentro de um aplicativo criado no Flex Builder ou na ferramenta de autoria do Flash.

Para criar a classe Greeter na ferramenta de autoria do Flash:

‘ Na ferramenta autoria do Flash, selecione Arquivo > Novo.

Ê Na caixa de diálogo Novo documento, selecione o arquivo do ActionScript e clique em -K.

Uma nova janela de edição do ActionScript será exibida.

D Selecione Arquivo > Salvar. Selecione uma pasta para conter o aplicativo, chame o arquivo do
ActionScript de

Greeter.ase clique em -K.

  ('  

A classe Greeter define um objecto, , que poderá ser usado no aplicativo HelloWorld.

‰  
  
    

‘ Digite o seguinte código no novo arquivo:

"  .

5

" 

5

"°

   
.
5

ð .
. 
..
. =C,J=
.
.

7

7

7

A classe Greeter inclui um único método   , que retorna uma seqüência de caracteres que diz
͞Hello

World!͟.

Ê Clique em Arquivo > Salvar para salvar esse arquivo do ActionScript. A classe Greeter agora está pronta
para ser usada em um aplicativo.

Ä       


  

A classe Greeter que você criou define um conjunto independente de funções de software, mas não
representa um aplicativo completo. Para usar a classe, é necessário criar um documento do Flash ou
aplicativo do Flex.

- aplicativo HelloWorld cria uma nova ocorrência da classe Greeter. Veja como anexar a classe Greeter
ao seu aplicativo.

‰   




 
    



‘ Selecione Arquivo > Novo.

Ê Na caixa de diálogo Novo documento, selecione Documento Flash e clique em -K.

Uma nova janela do Flash será exibida.

D SelecioneArquivo
>Salvar.SelecioneumapastaquecontenhaoarquivodeclasseGreeter.as,chameodocumento

Flash de â 

 !e clique em -K.


NapaletaFerramentasdoFlash,selecioneaferramentaTextoearrasteatéoPalcoparadefinirumnovocampode
texto, com aproximadamente 300 pixels de largura e 100 de altura.
ƒ No painel Propriedades, com o campo de texto ainda selecionado no Palco, defina o tipo de texto
como "Texto dinâmico" e digite " como o nome de ocorrência do campo de texto.

^ Clique no primeiro quadro da linha de tempo principal.

 No painel Ações, digite o seguinte script:

ð  
  

 
   

ö Salve o arquivo.

‰      


  

-desenvolvimentodesoftwareéumprocessointerativo.Vocêescreveumcódigo,tentacompilá-
loeoeditaatéobter uma compilação limpa. Depois, você executa o aplicativo compilado, testa-o para ver
se ele cumpre o design
pretendidoe,casonegativo,editaocódigonovamenteatéqueofaça.-sambientededesenvolvimentodoFlashe
do Flex Builder oferecem vários meios de publicar, testar e depurar aplicativos.

Veja as etapas básicas para testar o aplicativo HelloWorld em cada ambiente.

‰      




 
    



‘
Publiqueseuaplicativoeobserveseháerrosdecompilação.NaferramentadeautoriadoFlash,seleccioneControl
ar

> Testar filme para compilar o código do ActionScript e executar o aplicativo HelloWorld.

Ê Se forem exibidos erros ou avisos na janela Saída durante o teste do aplicativo, corrija as causas dos
erros nos arquivos HelloWorld.fla ou HelloWorld.as e tente testar o aplicativo novamente.

D Se não houver nenhum erro de compilação, você verá uma janela do Flash Player mostrando o
aplicativo Hello

World.

Vocêacaboudecriarumaplicativoorientadoaobjectossimples,mascompleto,queusaoActionScript3.0.
þ!    % & 

Para tornar o aplicativo um pouco mais interessante, agora você o fará solicitar e validar um nome de
usuário em relação a uma lista de nomes predefinida.

Primeiro,vocêactualizaráaclasseGreeterparaadicionarnovafuncionalidade.Depois,vocêactualizaráoaplicati
vopara usar a nova funcionalidade.

‰ #
$
  !

‘ Abra o arquivo Greeter.as.

Ê Altere o conteúdo do arquivo com o seguinte (as linhas novas e alteradas são mostradas em negrito):

"  .
5
" 
5
è 
 

 
 
è
 





 !
" 
#$

è 
% 
  

è
"°

  
  
.
5
ð .
. 
.
& 
'
(
) *
  
 
 
 +"$

&

& 
''
(

) , 


,$


(
 , 
,  
   $


.
.
7

è 
- ".  

 


è
 
  

& 
'% 

(
&

/0& 
'123'
(
  $


(
 
$


7
7

A classe Greeter agora tem vários novos recursos:

$
Amatrizð , listaosnomesdeusuárioválidos.Amatrizéinicializadacomumalistadetrêsnomesquando a
classe Greeter é carregada.

$ - método   agora aceita um nome de usuário e altera a saudação com base em algumas
condições. Se  for uma seqüência de caracteres vazia (==), a propriedade .
.será definida
para solicitar um
nomeaousuário.Seonomedousuárioforválido,asaudaçãosetornará=*
 á=Finalmente,seas
duascondiçõesnãoforematendidas,avariável.
.serádefinidacomo= 
 á* 

!
=

$ - método ð ,  retornará se 


" for encontrado na matriz ð , e ° se não
for encontrado. A instrução ð , 
,3° 
"  verifica cada seqüência de caracteres na
matriz
ð , emrelaçãoàseqüênciadecaracteres
" .-método# 
,3° retornaráaposiçãode
índice da primeira ocorrência de um objecto em uma matriz ou o valor -1 se o objecto não for encontrado
nela.

Em seguida, você editará o arquivo Flash ou Flex que faz referência a essa classe do ActionScript.

‘ Abra o arquivo HelloWorld.fla.

Ê
Modifiqueoscriptnouadro1paraqueumaseqüênciadecaracteres(==)sejatransmitidaaométodo  

da classe Greeter:

ð  
  

 
   == 

D Selecione a ferramenta Texto na paleta Ferramentas e crie dois novos campos de texto no Palco, lado
a lado e diretamente sob o campo de texto  
existente.

 No primeiro campo de texto novo, digite o texto o  % para servir de rótulo.
ƒ
Nooutrocampodetextonovo,enoInspetordepropriedades,selecioneInputTextcomootipodecampodetexto.

Selecione Linha única como o Tipo de linha. Digite  &como o nome de ocorrência.

^ Clique no primeiro quadro da linha de tempo principal.

 No painel Ações, adicione as seguintes linhas no final do script existente:

 
, 

;
, 

;
 ,,%ð
$
 < ,%ð
<%>&13C*?, 

°

?, ð
< ,%ð
 ð,

5

° ð
:, < ,%%( 

5

 
   ;
 

7

7

- novo código adiciona a seguinte funcionalidade:

$ As primeiras duas linhas simplesmente definem bordas para os dois campos de texto.

$ Umcampodetextodeentrada,comoocampo;
,possuiumconjuntodeeventosqueelepodedespachar.

- método ,,%ð
$
 permite definir uma função que é executada quando um tipo de evento

ocorre. Neste caso, o evento é o pressionamento de uma tecla no teclado.

$ A função personalizada ?, verifica se a tecla que foi pressionada é a tecla Enter. Caso
afirmativo,
elachamaométodo  doobjecto,transmitindootextodocampodetexto;
como um
parâmetro. Esse método retorna uma seqüência de caracteres de saudação com base no valor
transmitido. A seqüência de caracteres retornada é atribuída à propriedade do campo de texto
 
.
- script completo para o uadro 1 é o seguinte:

ð  
  

 
   == 

 
, 

;
, 

;
 ,,%ð
$
 < ,%ð
<%>&13C*?, 

°

?, ð
< ,%ð
 ð,

5

° ð
:, < ,%%( 

5

 
   ;
 

7

7

ö Salve o arquivo.

 Selecione Controlar > Testar filme para executar o aplicativo.

Duranteaexecuçãodoaplicativo,vocêserásolicitadoainserirumnomedeusuário.Seforválido(Sammy,Frank ou
Dean), o aplicativo exibirá a mensagem de confirmação "hello".

‰ „  


-s pacotes e espaços para nomes são conceitos relacionados. -s pacotes permitem compactar definições
de classe
juntasdeumaformaquefacilitaocompartilhamentodedadoseminimizaconflitosdenome.-sespaçosparanom
es
permitemcontrolaravisibilidadedeidentificadores,comonomesdepropriedadesemétodos,epodemseraplica
dos ao código quer ele resida dentro ou fora de um pacote. -s pacotes permitem organizar os arquivos
de classe, e os espaços para nomes permitem gerenciar a visibilidade de propriedades e métodos
individuais.
-spacotesnoActionScript3.0sãoimplementadoscomespaçosparanomes,maselesnãosãosinônimos.Aodecla
rar um pacote, você cria implicitamente um tipo especial de espaço para nomes que será conhecido em
tempo de compilação. -s espaços para nomes, quando criados explicitamente, não são necessariamente
conhecidos em tempo de compilação.

- seguinte exemplo usa a diretiva "  .para criar um pacote simples contendo uma classe:

"  . "

5

"  ":,

5

"ð  "


. 
.

"°

 "0



5

   "
.=° "0

= 

7

7

7

- nome da classe neste exemplo é SampleCode. Como a classe está dentro do pacote de amostras, o
compilador automaticamente qualifica o nome da classe em tempo de compilação em seu nome
totalmente qualificado: samples.SampleCode. - compilador também qualifica os nomes de quaisquer
propriedades e métodos, para que  "
.e  "0

se tornem
 " ":, "
.e  " ":, "0

, respectivamente.

Muitos desenvolvedores, especialmente aqueles com experiência em programação ava, podem optar
por colocar
apenasclassesnonívelsuperiordeumpacote.-ActionScript3.0,noentanto,oferecesuportenãoapenasaclasses
no
nívelsuperiordeumpacote,mastambémavariáveis,funçõeseatémesmoinstruções.Umautilizaçãoavançadad
esse recurso é definir um espaço para nomes no nível superior de um pacote de forma que fique
disponível para todas as
classesdessepacote.-bserve,porém,quesomentedoisespecificadoresdeacesso,"e

,sãopermiti
dos
nonívelsuperiordeumpacote.Diferentementedeava,quepermitedeclararclassesaninhadascomoparticulare
s,o ActionScript 3.0 não oferece suporte a classes aninhadas nem a particulares.
Entretanto, de muitas outras formas, os pacotes do ActionScript 3.0 são semelhantes aos pacotes na
linguagem de programação ava. Como você pode ver no exemplo anterior, as referências aos pacotes
totalmente qualificados são
expressasusandoooperadordot(),damesmaformaqueemava.Vocêpodeusarpacotesparaorganizarseucódi
go
emumaestruturahierárquicaintuitivaparaserusadaporoutrosprogramadores.Issofacilitaocompartilhament
ode código, permitindo criar seu próprio pacote para compartilhar com outros e usar pacotes criados por
outros em seu código.

- uso de pacotes também ajuda a garantir que os nomes de identificador usados sejam exclusivos e não
entrem em conflito com outros. Na verdade, alguns acham que essa é a maior vantagem dos pacotes. Por
exemplo, dois programadores que desejam compartilhar código entre si criam uma classe chamada
SampleCode. Sem pacotes, ela
criaumconflitodenomeeaúnicasoluçãoseriarenomearumadasclasses.Compacotes,porém,oconflitodenome
s é facilmente evitado colocando uma classe, ou de preferência as duas, em pacotes com nomes
exclusivos.

Também é possível incluir pontos incorporados no nome do pacote para criar pacotes aninhados. Isso
permite criar
umaorganizaçãohierárquicadepacotes.Umbomexemplodissoéopacoteflash.xmlfornecidopeloActionScript
3.0. - pacote flash.xml é aninhado dentro do pacote flash.

-pacoteflash.xmlcontémoanalisadorXMLherdadoqueerausadoemversõesanterioresdoActionScript.Umdo
s motivos para que agora ele resida no pacote flash.xml é que o nome da classe XML herdada entra em
conflito com o
nomedanovaclasseXMLqueimplementaafuncionalidadeXMLdaespecificaçãoECMAScript(E4X)disponívelno
ActionScript 3.0.
EmboraoactodemoveraclasseXMLherdadaparaumpacotesejaumaboamedidainicial,amaioriadosusuáriosd
as
classesXMLherdadasimportaopacoteflash.xml,oqueirágeraroconflitodenomesamenosquevocêselembrede
sempreusaronometotalmentequalificadodaclasseXMLherdada(flash.xml.XML).Paraevitaressasituação,acla
sse XML herdada agora se chama XMLDocument, como mostra o seguinte exemplo:

"  .° !

5

 '8$1
57 '8$,57 '8$ 57

7

GrandepartedoActionScript3.0éorganizadocombasenopacoteflash.Porexemplo,opacoteflash.displayconté
m a API de lista de exibição, e o pacote flash.events contém o novo modelo de eventos.

Ä    

-ActionScript3.0forneceumaflexibilidadesignificativanaformadeorganizarpacotes,classesearquivosdeorig
em.
AsversõesanterioresdoActionScriptpermitiamsomenteumaclasseporarquivodeorigemeexigiamqueonome
do
arquivodeorigemcorrespondesseaonomedaclasse.-ActionScript3.0permiteincluirdiversasclassesemumúni
co arquivo de origem, mas somente uma classe em cada arquivo pode ser disponibilizada para um código
externo ao arquivo. Em outras palavras, somente uma classe em cada arquivo pode ser declarada dentro
de uma declaração de pacote. As classes adicionais devem ser declaradas fora da definição do pacote, o
que torna as classes invisíveis ao código fora do arquivo de origem. - nome da classe declarada dentro da
definição do pacote deve corresponder ao nome do arquivo de origem.

- ActionScript 3.0 também oferece mais flexibilidade na forma de declarar pacotes. Nas versões
anteriores do
ActionScript,ospacotessimplesmenterepresentavamdiretóriosnosquaisosarquivosdeorigemeramcolocado
seos
pacotesnãoeramdeclaradoscomainstrução"  .,masincluíamonomedopacotecomopartedonomedaclas
se totalmente qualificada na sua declaração de classe. Embora ainda representem diretórios no
ActionScript 3.0, os
pacotespodemcontermaisdoqueapenasclasses.NoActionScript3.0,ainstrução"  .éusadaparadeclararu
m pacote, o que significa que você também pode declarar variáveis, funções e espaços para nomes no
nível superior de um pacote. É possível até incluir instruções executáveis no nível superior de um pacote.
Se você declarar variáveis, funções ou espaços para nomes no nível superior de um pacote, os únicos
atributos disponíveis nesse nível serão
"e

,esomenteumadeclaraçãodeníveldepacoteporarquivopoderáusaroatributo",quera
declaração seja uma classe, variável, função ou um espaço para nomes.

-s pacotes são úteis para organizar o código e evitar conflitos de nome. Não confunda o conceito de
pacotes com o
conceitonãorelacionadodeherançadeclasse.Duasclassesqueresidemnomesmopacotetêmumespaçoparano
mes
emcomum,masnãoestãonecessariamenterelacionadasdeoutraforma.Damesmaforma,umpacoteaninhado
pode não ter nenhuma relação semântica com o pacote pai.

j    

Para usar uma classe que está dentro de um pacote, você deve importar o pacote ou a classe específica.
Isso difere do

ActionScript 2.0, em que a importação de classes era opcional.

Porexemplo,considereoexemplodeclasseSampleCodeapresentadoanteriormentenestecapítulo.Seaclasser
esidir em um pacote chamado sample, você deverá usar uma das seguintes instruções de importação
usando a classe SampleCode:

" "!

ou

" " ":,

Em geral, as instruções "devem ser tão específicas quanto possível. Se você pretende usar apenas a
classe SampleCode do pacote samples, deverá importar somente a classe SampleCode e não o pacote
inteiro ao qual ela pertence. A importação de pacotes inteiros pode gerar conflitos de nome inesperados.

Você também deve colocar o código-fonte que define o pacote ou a classe no á O  . -
caminho de classe é uma lista definida pelo usuário de caminhos de diretório locais que determina onde o
compilador pesquisará as
classeseospacotesimportados.-caminhodeclasse,àsvezes,échamadode á O  ou á O
á.
Depois de importar adequadamente a classe ou o pacote, você pode usar o nome totalmente qualificado
da classe

(samples.SampleCode) ou apenas o nome da classe em si (SampleCode).

-s nomes totalmente qualificados são úteis quando classes, métodos ou propriedades com nomes
idênticos geram código ambíguo, mas podem ser difíceis de gerenciar se usados para todos os
identificadores. Por exemplo, o uso do nome totalmente qualificado gera um código detalhado ao
instanciar uma ocorrência da classe SampleCode:

ð  " " ":, 


  " ":, 

Conformeosníveisdepacotesaninhadoscrescem,alegibilidadedocódigodiminui.Nassituaçõesemquecertam
ente
nãohaveráidentificadoresambíguos,vocêpodetornarseucódigomaisfácildelerusandoidentificadoressimples
.Por exemplo, a instanciação de uma nova ocorrência da classe SampleCode será bem menos detalhada
se você usar somente o identificador de classe:

ð  " ":, 


  ":, 

Se você tentar usar os nomes de identificador sem primeiro importar o pacote ou a classe apropriados, o
compilador não conseguirá encontrar as definições de classe. Entretanto, se você importar um pacote ou
uma classe, qualquer tentativa de definir um nome que entre em conflito com um nome importado irá
gerar um erro.

Durante a criação de um pacote, o especificador de acesso padrão para todos os seus membros é


, o que
significaque,porpadrão,osmembrosdopacotesãovisíveisapenasporoutrosmembrosdomesmopacote.Paraq
ue uma classe fique disponível para o código fora do pacote, é necessário declará-la como ". Por
exemplo, o seguinte pacote contém duas classes, SampleCode e CodeFormatter:

66 ":, °"  . "

5

"  ":,57

7

66:,0  °"  . "

5
 :,0 57

7

A classe SampleCode é visível fora do pacote porque é declarada como uma classe ". A classe
CodeFormatter,
porém,évisívelsomentedentrodoprópriopacotedeamostras.SevocêtentaracessaraclasseCodeFormatterfor
ado pacote de amostras, irá gerar um erro, como mostra o exemplo a seguir:

" " ":,

" ":,0 

ð  " ":, 


  ":, 66 *" ð 0 :,0  

 :,0  66

Para que as duas classes fiquem disponíveis fora do pacote, é necessário declará-las como". Você
não pode aplicar o atributo "à declaração do pacote.

-s nomes totalmente qualificados são úteis para resolver conflitos de nome que podem ocorrer durante
o uso de
pacotes.Essecenáriopodesurgirnaimportaçãodedoispacotesquedefinemclassescomomesmoidentificador.
Por exemplo, considere o seguinte pacote, que também tem uma classe chamada SampleCode:

"  .
.° "

5

"  ":,57

7

Se você importar as duas classes, como a seguir, terá um conflito de nomes ao fazer referência à classe
SampleCode:

" " ":,

"
.° " ":,

ð  " ":, 


  ":, 66

°

-compiladornãotemcomosaberqualclasseSampleCodedeveusar.Pararesolveroconflito,vocêdeveusarono
me totalmente qualificado de cada classe, como a seguir:

ð  " " ":, 


  " ":, 
ð  "
.° " ":, 
 
.° " ":, 

> - á O á  áÄ 


á á  °
O  
V  áV
YOð

V
    áÄ
 á OOÄ  á
á 
ðð 

 á

O°  O  á


 
ð á 

á 
ðO    
O
  á -

Y   á
á Oð V
¢á  °  O  á      
á   


  Y   ¢   
   
V    
ðOá
   á 


 á O   

>  h    




-s espaços para nomes fornecem controle sobre a visibilidade das propriedades e dos métodos criados.
Pense nos
especificadoresdecontroledeacesso","ð ,",e

comoespaçosparanomesembutidos
. Se esses especificadores de controle de acesso predefinidos não atenderem às suas necessidades, você
poderá definir seus próprios espaços para nomes.

Se você está familiarizado com espaços para nomes XML, boa parte desta discussão não será novidade,
embora a sintaxe e os detalhes da implementação do ActionScript sejam ligeiramente diferentes do XML.
Se nunca trabalhou
comespaçosparanomesantes,oconceitoemsiésimples,masaimplementaçãotemumaterminologiaespecífica
que você deverá aprender.

Para entender como os espaços para nomes funcionam, é bom saber que o nome de uma propriedade ou
método sempre contém duas partes: um identificador e um espaço para nomes. - identificador é o que
normalmente entendemos como um nome. Por exemplo, os identificadores na seguinte definição de
classe são "
.e  "0

:

  ":,

5

ð  "
. 
.

°

 "0

 5
   "
.=° "0

= 

7

7
Semprequeasdefiniçõesnãoforemprecedidasporumatributodeespaçoparanomes,seusnomesserãoqualifica
dos pelo espaço para nomes 

padrão, o que significa que ficam visíveis apenas para os
chamadores no mesmo
pacote.Seocompiladorestiverdefinidonomodoestrito,ocompiladoremitiráumavisodequeoespaçoparanom
es 

se aplica a qualquer identificador sem um atributo de espaço para nomes. Para garantir que
um
identificadorfiquedisponívelemtodolugar,énecessárioqueseunomeespecificamentesejaprecedidopeloatrib
uto ". No código anterior,  "
.e  "0

têm um valor de espaço para nomes


.

Há três etapas básicas que devem ser seguidas ao usar espaços para nomes: Primeiro, defina o espaço
para nomes usando a palavra-chave
" . Por exemplo, o código a seguir define o espaço para
nomes ð
:

" ð


Emsegundolugar,vocêdeveaplicaroespaçoparanomesusando-
onolugardeumespecificadordecontroledeacesso em uma declaração de propriedade ou método. -
exemplo a seguir coloca uma função chamada 0

no espaço para nomes ð
:

ð
°

0

57

Porúltimo,depoisdeaplicaroespaçoparanomes,vocêpodefazerreferênciaaelecomadiretivaouqualificand
o o nome de um identificador com um espaço para nomes. - exemplo a seguir faz referência à função
0

por meio da diretiva :


" ð


0



Tambémépossívelusarumnomequalificadoparafazerreferênciaàfunção0

,comomostraoexempl
o a seguir:

ð
0


´ '(
'
  
 

-sespaçosparanomescontêmumvalor,oURI(Localizadoruniformederecursos),queàsvezeséchamadode á
O    á. Um URI permite garantir que a definição do espaço para nomes seja exclusiva.

Vocêcriaumespaçoparanomesdeclarandoumadefiniçãoparaelededuasformas.Vocêpodedefinirumespaçop
ara
nomescomumURIexplícito,assimcomodefiniriaumespaçoparanomesXML,oupodeomitiroURI.-exemploa
seguir mostra como um espaço para nomes pode ser definido usando um URI:

" ° !&" =!"66  ,6° !6"=

-URIfuncionacomoumaseqüênciadecaracteresdeidentificaçãoexclusivaparaoespaçoparanomes.Sevocêo
mitir
oURI,comonoexemploaseguir,ocompiladorcriaráumaseqüênciadecaracteresdeidentificaçãointernaexclusi
va no lugar do URI. Você não possui acesso a essa seqüência de caracteres de identificação interna.

" ° !&"

Depois de definido, com ou sem um URI, o espaço para nomes não poderá ser redefinido no mesmo
escopo. A

tentativadedefinirumespaçoparanomesdefinidoanteriormentenomesmoescopoirágerarumerrodecompila
ção.

Sefordefinidodentrodeumpacoteouumaclasse,talvezoespaçoparanomesnãofiquevisívelparaocódigoforad
o
pacoteoudaclasse,amenosquesejausadooespecificadordecontroledeacessoapropriado.Porexemplo,osegui
nte código mostra o espaço para nomes ° !&"definido com o pacote flash.utils. No exemplo a
seguir, a falta de
umespecificadordecontroledeacessosignificaqueoespaçoparanomes° !&"deveservisívelapenaspara
o código dentro do pacote flash.utils e não para qualquer outro código fora do pacote:

"  .° !

5

" ° !&"

7
-códigoaseguirusaoatributo"paratornaroespaçoparanomes° !&"visívelparaocódigoforado
pacote:

"  .° !

5

"
" ° !&"

7

      


Aplicar um espaço para nomes significa colocar uma definição em um espaço para nomes. As definições
que podem ser colocadas em espaços para nomes incluem funções, variáveis e constantes (não é possível
colocar uma classe em um espaço para nomes personalizado).

Considere,porexemplo,umafunçãodeclaradausandooespaçoparanomesdecontroledeacesso".-usod
o atributo "em uma definição de função coloca a função no espaço para nomes público, tornando-a
disponível para todo o código. Depois de definir um espaço para nomes, você pode usá-lo da mesma
forma que usa o atributo
",eadefiniçãoficarádisponívelparaocódigoquepodereferenciaroseuespaçoparanomespersonalizado.P
or exemplo, se você definir um espaço para nomes  ", poderá adicionar um método chamado
0

usando  "como um atributo, como mostra este exemplo:

"  "

 : 

5

 "0

57

7

A declaração do método 0



usando o espaço para nomes  "como um atributo significa
que o método pertence ao espaço para nomes  ".

Tenha em mente o seguinte durante a aplicação de espaços para nomes:

$ Você só pode aplicar um espaço para nomes por declaração.


$ Não há como aplicar um atributo de espaço para nomes a mais de uma definição por vez. Em outras
palavras, se você quiser aplicar seu espaço para nomes a dez funções diferentes, deverá adicioná-lo como
um atributo a cada uma das dez definições de função.

$
Seaplicarumespaçoparanomes,tambémnãoserápossíveldefinirumespecificadordecontroledeacessoporqu
e espaços para nomes e especificadores de acesso são mutuamente exclusivos. -u seja, não é possível
declarar uma função ou propriedade como ", "ð , ",ou 

e aplicar o espaço para
nomes.

O) #
    


Não é necessário fazer referência a um espaço para nomes explicitamente durante o uso de um método
ou uma propriedade declarados com qualquer um dos espaços para nomes de controle de acesso,
como", "ð , ",e 

. Isso porque o acesso a esses espaços para nomes especiais é
controlado por contexto. Por exemplo, as definições colocadas no espaço para nomes "ð ficam
disponíveis automaticamente para o código dentro da mesma classe. Para os espaços para nomes que
você definir, porém, essa diferenciação de contexto não existe. Para usar um método ou uma
propriedade colocados em um espaço para nomes personalizado, é necessário fazer referência ao espaço
para nomes.

Você pode fazer referência a espaços para nomes com a diretiva 
" ou pode qualificar o nome
com o espaço para nomes usando o pontuador do qualificador de nome (). A referência a um espaço
para nomes com a diretiva 
" "abre" o espaço para nomes, para que ele possa ser aplicado a
quaisquer identificadores não qualificados. Por exemplo, se definir o espaço para nomes  ", você
poderá acessar seus nomes usando 
"  ":

use namespace example1;

myFunction();

É possível abrir mais de um espaço para nomes por vez. uando aberto com use namespace, o espaço
para nomes
permaneceabertoemtodooblocodecódigonoqualseencontra.Nãohácomofecharexplicitamenteumespaçop
ara nomes.

-usodemaisdeumespaçoparanomes,contudo,aumentaaprobabilidadedeconflitosdenome.Sepreferirnãoa
brir um espaço para nomes, você poderá evitar a diretiva use namespacequalificando o nome do método
ou da
propriedadecomoespaçoparanomeseopontuadordoqualificadordenome.Porexemplo,oseguintecódigomo
stra como qualificar o nome myFunction()com o espaço para nomes example1:
example1::myFunction();

o     


Umexemplorealdeumespaçoparanomesusadoparaevitarconflitosdenomeéaclasseflash.utils.Proxyquefazp
arte doActionScript3.0.AclasseProxy,queéasubstituiçãoparaapropriedade-bject.resolvedoActionScript2.0,
permite interceptar diferenças em propriedades ou métodos não definidos antes da ocorrência de um
erro. Todos os métodos da classe Proxy residem no espaço para nomes flash_proxypara evitar conflitos
de nome.

Paraentendermelhorcomooespaçoparanomesflash_proxyéusado,éprecisoentendercomousaraclasseProxy
.
AfuncionalidadedaclasseProxyestádisponívelsomenteparasuasclassesherdadas.Emoutraspalavras,sequiser
usar os métodos da classe Proxy em um objeto, a definição de classe do objeto deve estender a classe
Proxy. Por exemplo,
parainterceptarastentativasdechamarummétodonãodefinido,énecessárioestenderaclasseProxyesubstituir
seu método callProperty().

Vocêdeveselembrardequeaimplementaçãodeespaçosparanomes,emgeral,éumprocessodetrêsetapas:defi
nir,
aplicarereferenciarumespaçoparanomes.ComoosmétodosdaclasseProxynuncasãochamadosexplicitament
e,o
espaçoparanomesflash_proxyédefinidoeaplicado,masnãoreferenciado.-ActionScript3.0defineoespaçopar
a nomesflash_proxyeoaplicanaclasseProxy.-códigoprecisaapenasaplicaroespaçoparanomesflash_proxyàs
classes que estendem a classe Proxy.

- espaço para nomes flash_proxyé definido no pacote flash.utils de forma semelhante à seguinte:

package flash.utils

public namespace flash_proxy;

- espaço para nomes é aplicado aos métodos da classe Proxy como mostrado no seguinte trecho dessa
classe:
public class Proxy

flash_proxy function callProperty(name:*, ... rest):*

flash_proxy function deleteProperty(name:*):Boolean

...

Como mostra o código a seguir, primeiro você deve importar a classe Proxy e o espaço para
nomesflash_proxy.
Depois,devedeclararsuaclassedeformaqueestendaaclasseProxy(vocêtambémdeveadicionaroatributodyna
mic
seestivercompilandonomodoestrito).AosubstituirométodocallProperty(),oespaçoparanomesflash_proxy
deve ser usado.
"  .
5
"° !?
"° !° !&"

,
 8?
,?
5
° !&"ð,°

 ?"
!* !
5
  =!, 
",=
 
7
7
7

Se criar uma ocorrência da classe MyProxy e chamar um método não definido, tal como o
método
. 
chamadonoexemploaseguir,seuobjetoProxyiráinterceptarachamadademétodoeexecutarasinstruçõesdent
ro do método  ?" (neste caso, uma instrução   simples).

ð  "8? 
 8? 

 "
. 66!, 
",
.

Há duas vantagens em ter os métodos da classe Proxy dentro do espaço para nomes° !&".
Primeiro, ter um
espaçoparanomesseparadoreduzadesordemnainterfacepúblicadequalquerclassequeestendeaclasseProxy.
(Há aproximadamente uma dúzia de métodos na classe Proxy que podem ser substituídos e nenhum foi
criado para ser chamadodiretamente.Colocá-
losnoespaçoparanomespúblicopoderiagerarconfusão.)Emsegundolugar,ousodo espaço para nomes
° !&"evita os conflitos de nome caso a subclasse Proxy contenha métodos de ocorrência
comnomesquecorrespondemaqualquermétododaclasseProxy.Porexemplo,vocêpodequererchamarumdes
eus métodos de  ?" . - código a seguir é aceitável, porque sua versão do
método ?" está em um espaço para nomes diferente:

,
 8?
,?

5

"°

 ?" 57

° !&"ð,°

 ?"
!* !

5

  =!, 
",=
 

7

7

-s espaços para nomes também podem ser úteis para fornecer acesso a métodos ou propriedades de
uma forma que não seria possível com os quatro especificadores de controle de acesso (", "ð ,


e ",). Por exemplo, você pode ter alguns métodos utilitários espalhados em vários
pacotes. Você quer disponibilizar esses
métodosparatodosospacotes,masnãoquerquesejampúblicos.Parafazerisso,vocêpodecriarumnovoespaçop
ara nomes e usá-lo como seu próprio especificador de controle de acesso especial.

- exemplo a seguir usa um espaço para nomes definido pelo usuário para agrupar duas funções que
residem em pacotes diferentes. Ao agrupá-las no mesmo espaço para nomes, você pode tornar as duas
funções visíveis para uma classe ou um pacote por meio de uma única instrução 
" .

Esteexemplousaquatroarquivosparademonstraratécnica.Todososarquivosdevemestarnocaminhodeclasse.
- primeiro deles, myInternal.as, é usado para definir o espaço para nomes ;

. Como o arquivo
está em um pacotechamadoexample,vocêdevecolocá-
loemumapastachamadaexample.-espaçoparanomesémarcadocomo "para que possa ser importado
para outros pacotes.
66;

 
°, ""  . "

5

"
" ;

 =!"66  ,6))H6 
"6 "=

7

- segundo e terceiro arquivos, Utility.as e Helper.as, definem as classes que contêm os métodos que
devem estar disponíveis para outros pacotes. A classe Utility é um pacote example.alpha, o que significa
que o arquivo deve ser colocado dentro de uma pasta chamada alpha, que é uma subpasta da pasta
example. A classe Helper é um pacote
example.beta,oquesignificaqueoarquivodevesercolocadodentrodeumapastachamadabeta,quetambéméu
ma
subpastadapastaexample.-sdoispacotes,example.alphaeexample.beta,devemimportaroespaçoparanome
santes de usá-lo.

66@ 
! "6 "! °,
"  . " "! 
5
" ";



" @
5
"ð  ð & :

 )

" °

  
5
& :

7

;

 °

. :
 

5

& :

7
7
7

66" 
! "6 °,
"  . " 
5
" ";



" "
5
"ð  ð &  "1 

" °

  
5
&  " 
 1  
7

;

 °

. : , 1 
5

&  "
7
7
7

-quartoarquivo,NamespaceUseCase.as,éaclassedeaplicativoprincipaledeveserumairmãdapastaexample.N
o Adobe Flash CS4 Professional, essa classe deveria ser usada como a classe de documento para o FLA. A
classe
NamespaceUseCasetambémimportaoespaçoparanomes;

eousaparachamarosdoismétodosestáti
cos que residem nos outros pacotes. - exemplo usa métodos estáticos apenas para simplificar o código.
-s métodos estáticos e de ocorrência podem ser colocados no espaço para nomes ;

.
66 " @:  
"  .
5
"° !," 8ð:"
" ";

66"
" 
" " "! @66"@ 
" " "66"" 

"  " @: 


,8ð:"
5
"°

 " @:  
5

" ;



@  
@  
  @ :
 66

"  
  " : , 66D     ,E
7
7
7

Π  
Asvariáveispermitemarmazenarvaloresusadosnoprograma.Paradeclararumavariável,vocêdeveusarainstru
ção ð com o nome da variável. No ActionScript 2.0, o uso da instrução ð só é necessário se você usar
anotações de
tipo.NoActionScript3.0,ousodainstruçãoð ésemprenecessário.Porexemplo,aseguintelinhadoActionScript
declara uma variável chamada :

ð 

Seomitirainstruçãoð aodeclararumavariável,vocêobteráumerrodecompiladornomodoestritoeumerrode
tempodeexecuçãonomodopadrão.Porexemplo,aseguintelinhadecódigoresultaráemumerroseavariávelnã
o for definida antes:

66° 
"ð,°
,

Aassociaçãodeumavariávelaumtipodedadosdeveserfeitaduranteadeclaraçãodavariável.Adeclaraçãodeum
a variável sem designar seu tipo é legal, mas gera um aviso do compilador no modo estrito. Um tipo de
variável é designado anexando o nome da variável ao caractere dois-pontos (:) seguido do tipo da
variável. Por exemplo, o seguinte código declara uma variável que é do tipo int:

ð 

Você atribui um valor à variável usando o operador de atribuição ( ). Por exemplo, o seguinte código
declara uma variável e lhe atribui o valor 20:
ð 


 )

Podesermaisconvenienteatribuirumvaloraumavariávelaomesmoqueemqueelaédeclarada,comonoexempl
o a seguir:

ð 
 )

A técnica de atribuir um valor a uma variável no momento em que ela é declarada é comumente usado
não apenas para atribuir valores primitivos, como inteiros e seqüências de caracteres, mas também para
criar uma matriz ou instanciação de uma ocorrência de uma classe. - exemplo a seguir mostra a
declaração e a atribuição de um valor a uma matriz usando uma única linha de código:

ð 
# #  D=K=*=
=*= =E

Épossívelcriarumaocorrênciadeumaclasseusandoooperador
 .-exemploaseguircriaumaocorrênciadeum
a classe chamada :: e atribui uma referência para a ocorrência de classe recém-criada à variável
chamada ;:

ð ;::  
 ::  

Se tiver mais de uma variável a declarar, você poderá declará-las em uma única linha de código usando o
operador vírgula (*) para separar as variáveis. Por exemplo, o seguinte código declara três variáveis em
uma única linha de código:

ð  
*
*


Vocêtambémpodeatribuirvaloresacadavariávelnamesmalinhadecódigo.Porexemplo,oseguintecódigodecla
ra três variáveis ( , e ), e atribui um valor a cada uma:

ð  
 )*
 )*
 A)

Emboravocêpossausarooperadorvírgulaparaagrupardeclaraçõesdevariáveisemumainstrução,issopodered
uzir a legibilidade do código.
> *     

-  de uma variável é a área do código em que a variável pode ser acessada por uma referência
léxica. Uma variável  é aquela definida em todas as áreas do seu código, enquanto que uma variável
 é aquela definida apenas em uma parte dele. No ActionScript 3.0, às variáveis é sempre atribuído o
escopo da função ou classe em que elas são declaradas. Uma variável global é aquela especificada fora de
qualquer definição de função ou classe. Por exemplo, o seguinte código cria uma variável global
declarando-a fora de qualquer função: - exemplo mostra que uma variável global está disponível tanto
dentro quanto fora da definição da função.

ð   
. = =

°

" 

5

    66 

7

" 

    66 

Avariávellocalédeclaradadentrodeumadefiniçãodefunção.Amenoráreadecódigoparaaqualépossíveldefinir
uma variável local é uma definição de função. Uma variável local declarada dentro de uma função existirá
somente nessa função. Por exemplo, se você declarar uma variável chamadadentro de uma função
chamada   " , essa variável não ficará disponível fora da função.
°

  " 

5

ð $  
. = =

7

  " 

  $  66 $ 


,°
,. 

Se o nome de variável usado para a variável local já estiver declarado como uma variável global, a
definição local
ocultará(ouobscurecerá)adefiniçãoglobalenquantoavariávellocalestivernoescopo.Avariávelglobalaindaexi
stirá fora da função. Por exemplo, o código a seguir cria uma variável de seqüência de caracteres global
chamadae
umavariávellocaldemesmonomedentrodafunção" .Ainstrução dentrodafunçãogeraovalor
local da variável, mas a instrução  fora da função gera o valor global da variável.

ð  
. = =

°

" 

5

ð  
. =$ =

   66$ 

7

" 

   66 

AsvariáveisdoActionScript,diferentementedeC++eava,nãopossuemescopoemníveldebloqueio.Umcódigod
e bloqueio é qualquer grupo de instruções entre uma chave de abertura ( 5) e uma de fechamento ( 7).
Em algumas linguagens de programação, como C++ e ava, as variáveis declaradas dentro de um bloco de
código não ficam
disponíveisforadele.EssarestriçãodeescopoéchamadadeescopoemníveldebloqueioenãoexistenoActionScri
pt.
Sevocêdeclararumavariáveldentrodeumblocodecódigo,elaficarádisponívelnãoapenasnessebloco,mastam
bém
emoutraspartesdafunçãoàqualoblocopertence.Porexemplo,aseguintefunçãocontémvariáveisquesãodefini
das em vários escopos de bloco. Todas as variáveis estão disponíveis na função.
°

 # #  

5

ð 
%

 # 
.!

°
%
G) 

5

ð   


. =%
L=

° ð 
 )F
%
 

5

ð ð   


. ==# DE

   ð   

7

   *ð  * 66 ,°


,

7

   *ð  * 66 ,°


,°
%
G)

7

 D=% !=*=8


=*= 
=E 

Umaimplicaçãointeressantedafaltadeescopoemníveldeblocoéquevocêpodelerougravaremumavariávelant
es que ela seja declarada, contanto que ela seja declarada antes que a função termine. Isso é possível por
causa de uma técnica chamada  á , que significa que o compilador move todas as declarações de
variável para o início da
função.Porexemplo,ocódigoaseguirécompiladomuitoemboraafunçãoinicial  paraavariável
ocorra
antes que a variável
seja declarada:

 
 66 ð 
 ) 
 66)
- compilador, porém, não içará nenhuma instrução de atribuição. Isso explica por que o  inicial de


resultaem (enãoumnúmero),queéovalorpadrãoparaasvariáveisdotipodedadosNumber.Issosignificaque
você pode atribuir valores a variáveis mesmo antes que elas sejam declaradas, como mostra o seguinte
exemplo:


 /
 
 66/
ð 
 )
 
 66)

Π   

Um ð  O é o valor que uma variável contém antes que seu valor seja definido. Uma variável
é    O quando seu valor é definido pela primeira vez. Se você declarar uma variável, mas não
definir seu valor, ela será uma variável     O . - valor de uma variável não inicializada depende
de seu tipo de dados. A tabela a seguir descreve os valores padrão de variáveis, organizados por tipo de
dados:

ù      

  ° 

 


  

-  


  

  

    


     ! 
,°
,

ù              




ParavariáveisdotipoNumber,ovalorpadrãoé (enãoumnúmero),queéumvalorespecialdefinidopelopadrão

IEEE-754 para indicar um valor que não representa um número.

Sevocêdeclararumavariável,masnãoseutipodedados,otipodedadospadrão!seráaplicado,oquesignificaque,
naverdade,avariávelésemtipo.Sevocêtambémnãoinicializarumavariávelsemtipocomumvalor,seuvalorpadr
ão será 
,°
,.

Para tipos de dados que não forem Boolean, Number, int e uint, o valor padrão de qualquer variável não
inicializada
será
.IssoseaplicaatodasasclassesdefinidaspeloActionScript3.0,bemcomoaquaisquerclassespersonaliza
das que você criar.
- valor
não é um valor válido para variáveis do tipo Boolean, Number, int ou uint. Se você tentar
atribuir um valor
a esse tipo de variável, o valor será convertido no valor padrão para esse tipo de
dados. Para variáveis do tipo -bject, é possível atribuir um valor
. Se você tentar atribuir um valor

,°
,a uma variável do tipo -bject, o valor será convertido em
.

Para variáveis do tipo Number, existe uma função especial de nível superior chamada  que retorna
o valor booleano se a variável não for um número e ° se for.
ù     
Um OO Odefine um conjunto de valores. Por exemplo, o tipo de dados Boolean é o conjunto de
exatamente dois valores: e ° . Além do tipo de dados Boolean, o ActionScript 3.0 define vários
tipos de dados mais
comumenteusados,comoString,NumbereArray.Vocêpodeescolherseusprópriostiposdedadosusandoclasse
sou
interfacesparadefinirumconjuntodevalorespersonalizado.TodososvaloresnoActionScript3.0,sejamprimitiv
os ou complexos¢são objetos.

Um ð áðé aquele que pertence a um dos seguintes tipos de dados: Boolean, int, Number,
String e uint. Trabalhar com valores primitivos, em geral, é mais rápido do que trabalhar com valores
complexos, porque o ActionScript armazena valores primitivos de uma forma especial que torna as
otimizações de memória e velocidade possíveis.

>     O O   ¢Y    á  ð áð  á 
 áá
 ð-° Oá á  O áá
 ð ° 
 á
°  ¢   ¢ áá
 á𠏏O

Oáá 
á   
ð O OO
¢
 °    ° ð á á O
ð á

Um ð  áé um valor que não é primitivo. -s tipos de dados que definem conjuntos de valores
complexos incluem Array, Date, Error, Function, RegExp, XML e XMLList.

Muitaslinguagensdeprogramaçãodistinguemosvaloresprimitivosdosobjetosdelimitadores.ava,porexempl
o,tem
umprimitivointeaclassejava.lang.Integerqueodelimita.-sprimitivosavanãosãoobjetos,masseusdelimitado
res são, o que torna os primitivos úteis para algumas operações e os objetos delimitadores mais
adequados para outras operações. No ActionScript 3.0, os valores primitivos e seus objetos delimitadores
são, na prática, indistinguíveis.
Todososvalores,mesmoosprimitivos,sãoobjetos.-FlashPlayereoAdobeAIRtratamessestiposprimitivoscom
o casos especiais que se comportam como objetos mas não exigem a sobrecarga normal associada à
criação de objetos. Isso significa que as duas linhas de código a seguir são equivalentes:

ð ;

 A

ð ;

 
 
 A 

TodosostiposdedadosprimitivosecomplexoslistadosacimasãodefinidospelasclassescentraisdoActionScript
3.0.
Asclassescentraispermitemcriarobjetosusandoosvaloresliteraisemvezdooperador
 .Porexemplo,vocêpo
de criar uma matriz usando um valor literal ou o construtor de classe Array, como a seguir:

ð # #  D**AE66 ð 

ð # #  
 #  **A 66# 


      
Averificaçãodetipospodeocorreremtempodecompilaçãooudeexecução.Linguagenstipificadasestatisticame
nte, como C++ e ava, executam a verificação de tipos em tempo de compilação. Linguagens tipificadas
dinamicamente, como Smalltalk e Python, manipulam a verificação de tipos em tempo de execução.
Como uma linguagem tipificada
dinamicamente,oActionScript3.0temumaverificaçãodetiposemtempodeexecução,mastambémoferecesup
orte
àverificaçãodetiposemtempodecompilaçãocomummododecompiladorespecialchamadoáO.Nom
odo
estrito,averificaçãodetiposocorreemtempodecompilaçãoedeexecução,masnomodopadrão,elaocorreapen
as em tempo de execução.

Linguagens tipificadas dinamicamente oferecem grande flexibilidade na estruturação do código, mas às


custas de
permitirqueerrosdetiposemanifestememtempodeexecução.Linguagenstipificadasestatisticamenterelatam
erros
detipoemtempodecompilação,masexigemqueasinformaçõesdetiposejamconhecidasemtempodecompilaç
ão.
Π)      

Averificaçãodetiposemtempodecompilaçãoémaisvantajosaemprojetosgrandesporque,conformeotamanh
ode
umprojetoaumenta,aflexibilidadedotipodedadossetornamenosimportantedoquearápidadetecçãodeerros
de tipo. É por isso que, por padrão, o compilador do ActionScript no Adobe Flash CS4 Professional e no
Adobe Flex Builder é definido para ser executado no modo restrito.

Para fornecer a verificação de tipos em tempo de compilação, o compilador precisa conhecer as


informações de tipo de dados para as variáveis ou expressões no seu código. Para declarar explicitamente
um tipo de dados para uma variável,adicioneooperadordois-
pontos()seguidodotipodedadoscomoumsufixoparaonomedavariável.Para associar um tipo de dados a
um parâmetro, use o operador dois-pontos seguido do tipo de dados. Por exemplo, o
seguintecódigoadicionainformaçõesdetipodedadosaoparâmetro?  edeclaraumavariável?  comu
m tipo de dados explícito:

°


 ?   
. 

5

  ?   

7

ð ?   
. =!=


 ?   

No modo estrito, o compilador do ActionScript relata incompatibilidades de tipos como erros do


compilador. Por
exemplo,ocódigoaseguirdeclaraumparâmetrodefunção?  ,dotipo-bject,masdepoistentaatribuirvalore
s do tipo String e Number ao parâmetro. Isso gera um erro do compilador no modo estrito.

°

,
 ?  34 

5

° ?   


. 

5

ð   


. ?  66"
,  = 
.=  

7

° ?   

5
ð  ?  66"
,  == 

7

7

Mesmo no modo estrito, porém, é possível optar seletivamente pela verificação de tipos em tempo de
compilação
deixandooladodireitodeumainstruçãodeatribuiçãosemtipos.Vocêpodemarcarumavariávelouexpressãoco
mo sem tipo omitindo uma anotação de tipo ou usando a anotação de tipo especial de asterisco (!). Por
exemplo, se o
parâmetro?  noexemploanteriorformodificadodeformaquenãotenhamaisumaanotaçãodetipo,ocódigo
compilará no modo estrito:
°

,
 ?   

5

° ?   


. 

5

ð   


. ?  

  = 
.=  

7

° ?   

5

ð  ?  

  == 

7

7

,
 )) 

,
 =
!
,,= 

Verificação de tipos em tempo de execução

A verificação de tipos em tempo de execução ocorrerá no ActionScript 3.0 se você compilar em modo
restrito ou em modo de padrão. Considere uma situação em que o valor 3 é transmitido como um
argumento para uma função que
esperaumamatriz.Nomodoestrito,ocompiladorirágerarumerro,porqueovalor3nãoécompatívelcomotipode
dados Array. Se você desabilitar o modo estrito e executar no modo padrão, o compilador não reclamará
sobre
incompatibilidadedetipos,masaverificaçãoemtempodeexecuçãodoFlashPlayeredoAdobeAIRresultaráemu
m erro em tempo de execução.
- exemplo a seguir mostra uma função chamada " que espera um argumento Array mas tem um
valor transmitido de 3. Isso gera um erro em tempo de execução no modo padrão, porque o valor 3 não é
um membro do tipo de dados (Array) declarado do parâmetro.

°

" ?  #  

5

  ?   

7

ð  A

"  

66
B
#
"A)
, ,,

Tambémpodehaversituaçõesemqueháumerrodetipoemtempodeexecuçãomesmoduranteaoperaçãonomo
do
estrito.Issoépossívelsevocêusaromodoestrito,masoptarpelaverificaçãodetiposemtempodecompilação,usa
ndo
umavariávelsemtipo.-usodeumavariávelsemtiponãoeliminaaverificaçãodetipos,masasuspendeatéotemp
o
deexecução.Porexemplo,seavariáveldoexemploanteriornãotiverumtipodedadosdeclarado,ocompila
dor não poderá detectar a incompatibilidade de tipos, mas o Flash Player e o Adobe AIR irão gerar um
erro de tempo de execução porque comparam o valor do tempo de execução de , que está definido
como 3 como resultado da instrução de atribuição, com o tipo de ?  , que é definido com o tipo de
dados Array.

°

" ?  #  

5

  ?   

7

ð  A

"  

66
B
#
"A)
A verificação de tipos em tempo de execução também permite um uso mais flexível de herança que a
verificação em tempo de compilação. Com a suspensão da verificação de tipos para o tempo de execução,
o modo padrão permite referenciar as propriedades de uma subclasse mesmo que você a ð. Uma
elevação ocorre quando você usa uma
classebaseparadeclararotipodeumaocorrênciadeclassemasusaumasubclasseparainstanciá-
la.Porexemplo,você pode criar uma classe chamada ClassBase que pode ser estendida (classes com o
atributo °
não podem ser estendidas):

 : 9 

5

7

Depois,vocêpodecriarumasubclassedeumaClassBasechamadaClassExtender,quetemumapropriedadecha
mada

 
., como a seguir:

 : %
,
,: 9 

5

ð  
. 
.

7

Usando as duas classes, é possível criar uma ocorrência de classe que é declarada usando o tipo de dados
ClassBase, mas instanciada usando o construtor ClassExtender. Uma elevação é considerada uma
operação segura, porque a classe base não contém nenhuma propriedade ou método que não esteja na
subclasse.

ð : : 9  


 : %
, 

Uma subclasse, porém, contém propriedades ou métodos que sua classe base não contém. Por exemplo,
a classe ClassExtender contém a propriedade  
., que não existe na classe ClassBase. No modo
padrão do
ActionScript3.0,épossívelreferenciaressapropriedadeusandoaocorrência: semgerarumerrodetempo
de compilação, como mostra o seguinte exemplo:
ð : : 9  
 : %
, 

:  


. =!=

66

#
"A)
, ,,

- operador is

- operador , que é novo no ActionScript 3.0, permite testar se uma variável ou expressão é um
membro de um determinado tipo de dados. Nas versões anteriores do ActionScript, o operador


°fornecia essa
funcionalidade,mas,noActionScript3.0,ooperador

°nãodeveserusadoparatestaraassociaçãodetip
o de dados. - operador deve ser usado no lugar do operador 

°para verificação de tipos
manual, porque a expressão 

°apenas verifica a existência de na cadeia de protótipos (e,
no ActionScript 3.0, a cadeia de protótipos não fornece um retrato completo da hierarquia de herança).

-operadorexaminaahierarquiadeherançaapropriadaepodeserusadoparaverificarnãoapenasseumobjeto
é uma ocorrência de uma classe específica, mas também de uma classe que implementa uma
determinada interface. -
exemploaseguircriaumaocorrênciadaclasseSprite,chamada "eusaooperadorparatestarse "
é uma ocorrência das classes Sprite e Display-bject e se implementa a interface IEventDispatcher:

ð  " " 


  "    " " 66   "
1" 34 66   ";%ð
1" ! 66
- operador verifica a hierarquia de herança e relata adequadamente que  "é compatível com as
classes Sprite e Display-bject (a classe Sprite é uma subclasse da classe Display-bject). -
operadortambém verifica se  "é herdada de alguma classe que implementa a interface
IEventDispatcher. Como a classe Sprite é herdada da classe EventDispatcher, que implementa a interface
IEventDispatcher, o operador relata corretamente que  "implementa a mesma interface.

- exemplo a seguir mostra os mesmos testes do exemplo anterior, mas com



°em vez do
operador . - operador 

°identifica corretamente que  "é uma ocorrência de Sprite ou
Display-bject, mas retorna ° quando usado para testar se  "implementa a interface
IEventDispatcher.

   "

° " 66   "

°1" 34 66
   "

°;%ð
1" ! 66° 

- operador as

- operador , que é novo no ActionScript 3.0, também permite verificar se uma expressão é um membro
de um determinado tipo de dados. Diferentemente do operador , porém, o operador não retorna um
valor booleano.
Emvezdisso,ooperador retornaovalordaexpressãoemvezdee
emvezde° .-exemploaseguir
mostra os resultados do uso do operador em vez de no caso simples de verificar se uma ocorrência
de Sprite é um membro dos tipos de dados Display-bject, IEventDispatcher e Number.

ð  " " 


  "    "  " 66D4 "E   "
1" 34 66D4 "E   " ;%ð
1" ! 66D4 "E
   "   66


Duranteousodooperador ,ooperandoàdireitadeveserumtipodedados.Umatentativadeusarumaexpressão
diferente de um tipo de dados como operando à direita resultará em um erro.

Ä
+

Uma classe O á define um objeto que pode ser alterado em tempo de execução adicionando ou
alterando propriedades e métodos. Uma classe que não é dinâmica, como a classe String, é uma
classe O . Não é possível adicionar propriedades ou métodos a uma classe selada em tempo de
execução.
Asclassesdinâmicassãocriadascomousodoatributo,
aodeclararumaclasse.Porexemplo,ocódigoasegui
r cria uma classe dinâmica chamada ?
:

,
 ?


5

"ð ð "ð 


. 
. =!="ð "
. 
. =!=°


?


5

  =?


 ,= 

7

7

Se, posteriormente, você instanciar uma ocorrência da classe ?


, poderá adicionar propriedades ou
métodos a
elaforadadefiniçãodaclasse.Porexemplo,ocódigoaseguircriaumaocorrênciadaclasse?
eadicionauma
propriedade chamada 
.e outra chamada à ocorrência:
ð ?
?
 
 ?
?
 
. =
.=?
  A

  ?
 
.*?
  66
.A

Aspropriedadesadicionadasaumaocorrênciadeumaclassedinâmicasãoentidadesdetempodeexecução,poris
so qualquer tipo de verificação é feito em tempo de execução. Não é possível adicionar uma anotação de
tipo a uma propriedade adicionada dessa forma.

Você também pode adicionar um método à ocorrência ?


definindo uma função e anexando-a a
uma
propriedadedaocorrência?
.-códigoaseguirmoveainstruçãoderastreamentoparaummétodochama
do  ?
:

ð ?
?
 
 ?
?
 
. =
.=?
  A
?
 ?
 °

 

5

  ! 
.*!  

7

?
 ?
66
.A

-s métodos criados dessa forma, entretanto, não têm acesso a qualquer propriedade ou método
particular da classe Protean. Além disso, mesmo as referências às propriedades ou métodos públicos da
classe?
devem ser qualificados com a palavra-chave !ou o nome da classe. - exemplo a seguir
mostra a tentativa do método  ?
de acessar as variáveis particulares e públicas da classe
?
.

?
 ?
 °

 

5

  ?
"ð 
. 66
,°
,  ?
"
. 66!

7

?
 ?


´         
-s tipos nativos primitivos incluem Boolean, int, Null, Number, String, uint e void. As classes base do
ActionScript também definem os seguintes tipos de dados complexos: -bject, Array, Date, Error,
Function, RegExp, XML e XMLList.

ù     

-tipodedadosBooleancompreendedoisvalores:e° .Nenhumoutrovaloréválidoparavariáveisdotipo

Boolean. - valor padrão de uma variável Boolean que foi declarada mas não inicializada é ° .

ù    

- tipo de dados int é armazenado internamente como um inteiro de 32 bits e compreende o conjunto de
inteiros de

-2.147.483.648(-231)a2.147.483.647(231 -
1),inclusive.AsversõesanterioresdoActionScriptofereciamapenasotipo de dados Number, que era usado
para números inteiros e de ponto flutuante. No ActionScript 3.0, agora você tem acesso a tipos de
computador de nível baixo para inteiros de 32 bits assinados e não assinados. Se a sua variável não
tivernúmerosdepontoflutuante,ousodotipodedadosintemvezdotipodedadosNumberdeverásermaisrápido
e eficiente.
Para valores inteiros fora do intervalo dos valores int mínimo e máximo, use o tipo de dados Number, que
pode manipular valores entre positivo e negativo 9.007.199.254.740.992 (valores inteiros de 53 bits). -
valor padrão para variáveis do tipo de dados int é 0.

ù    

- tipo de dados Null contém apenas um valor,


. É o valor padrão para o tipo de dados String e todas
as classes que definem tipos de dados complexos, inclusive a classe -bject. Nenhum outro tipo de dados
primitivo, como Boolean, Number, int e uint, contém o valor
. - Flash Player e o Adobe AIR
converterão o valor
no valor
padrãoapropriadosevocêtentaratribuir
avariáveisdotipoBoolean,Number,intouuint.Vocênãopodeusar
esse tipo de dados como uma anotação de tipo.

ù    


No ActionScript 3.0, o tipo de dados Number pode representar inteiros, inteiros não assinados e números
de ponto flutuante. Entretanto, para maximizar o desempenho, você deve usar o tipo de dados Number
somente para valores inteiros maiores do que os tipos 
e 
de 32 bits podem armazenar ou para
números de ponto flutuante. Para
armazenarumnúmerodepontoflutuante,incluaumpontodecimalnonúmero.Sevocêomitirumpontodecimal,
o número será armazenado como um inteiro.

- tipo de dados Number usa o formato de precisão dupla de 64 bits conforme especificado pelo Padrão
IEEE para Aritmética de Ponto Flutuante Binário (IEEE-754). Esse padrão determina como os números de
ponto flutuante são armazenados usando os 64 bits disponíveis. Um bit é usado para designar se o
número é positivo ou negativo. -nze bits são usados para o expoente, que é armazenado como base 2.
-s 52 bits restantes são usados para armazenar o  ° O(também chamado de á  ), que é o
número elevado à potência indicada pelo expoente.

Com o uso de alguns bits para armazenar um expoente, o tipo de dados Number pode armazenar
números de ponto
flutuantesignificativamentemaioresdoqueseusassetodososbitsparaosignificando.Porexemplo,seotipodeda
dos Numberusasseos64bitsparaarmazenarosignificando,elearmazenariaumnúmerotãograndequanto265 -
1.Com
ousode11bitsparaarmazenarumexpoente,otipodedadosNumberpodeelevarseusignificandoàpotênciade210
23
.
-s valores máximo e mínimo que o tipo Number pode representar são armazenados em propriedades
estáticas da classe Number chamadas 8#'&+#$@%e 8;&+#$@%.

8#'&+#$@% 2H2AAMNHAA)N

8;&+#$@% M2M)H/HM/NMMHBAM

Embora esse intervalo de números seja enorme, seu custo é a precisão. - tipo de dados Number usa 52
bits para
armazenarosignificando,porissoosnúmerosqueexigemmaisde52bitsparafazerumarepresentaçãoprecisa,co
mo a fração 1/3, são apenas aproximações. Se o seu aplicativo exibir precisão absoluta com números
decimais, será necessário usar um software que implemente a aritmética de ponto flutuante decimal em
vez da aritmética de ponto flutuante binário.

Durante o armazenamento de valore inteiros com o tipo de dados Number, somente os 52 bits do
significando são usados. - tipo de dados Number usa esses 52 bits e um bit oculto especial para
representar inteiros de -

9.007.199.254.740.992 (-253)a 9.007.199.254.740.992 (253).

- Flash Player e o Adobe AIR usam o valor  não apenas como o valor padrão para variáveis do tipo
, mas também como resultado de qualquer operação que deve retornar um número e não retorna.
Por exemplo, se você
tentarcalculararaizquadradadeumnúmeronegativo,oresultadoserá .-utrosvaloresNumberespeciaisincl
uem  ° ðe  °   ð

> -
 OO Oð c    Oð á á°cYOð cO
V VV 
O
OðO O ð
V VV 
OOðO O   ð
ù     

- tipo de dados String representa uma seqüência de caracteres de 16 bits. -s Strings são armazenados
internamente como caracteres Unicode, usando o formato UTF-16, Eles são valores imutáveis, assim
como na linguagem de programação ava. Uma operação sobre um valor String retorna uma nova
ocorrência da seqüência de caracteres. - valor padrão para uma variável declarada com o tipo de dados
String é
. - valor
não é o mesmo que a seqüência de caracteres vazia (==), muito embora ambos
representem a ausência de caracteres.

ù     

-tipodedadosintéarmazenadointernamentecomouminteironãoassinadode32bitsecompreendeoconjunto
de inteiros de 0 a 4.294.967.295 (232 - 1), inclusive. Use o tipo de dados uint para circunstâncias especiais
que exigem inteiros não negativos. Por exemplo, você deve usar o tipo de dados uint para representar os
valores de cor de pixel, porque o tipo de dados int tem um bit de sinal interno que não é apropriado para
manipular valores de cor. Para
valoresinteirosmaioresdoqueovaloruintmáximo,useotipodedadosNumber,quepodemanipularvaloresinteir
os de 53 bits. - valor padrão para variáveis do tipo de dados uint é 0.

ù     

-tipodedadosvoidcontémapenasumvalor,
,°
,.NasversõesanterioresdoActionScript,
,°
,erao
valorpadrãoparaocorrênciasdaclasse-bject.NoActionScript3.0,ovalorpadrãoparaocorrênciasde-bjecté

. Se você tentar atribuir um valor 
,°
,a uma ocorrência da classe -bject, o Flash Player ou o Adobe
AIR converterão o valor em
. É possível atribuir apenas um valor de 
,°
,a variáveis sem tipo.
Variáveis sem
tiposãoaquelasquenãopossuemnenhumaanotaçãodetipoouusamosímboloasterisco(!)paraaanotaçãodetip
o. Você pode usar ð,apenas como uma anotação de tipo de retorno.

ù    -  

- tipo de dados -bject é definido pela classe -bject. A classe -bject serve de classe base para todas as
definições de classe no ActionScript. A versão do ActionScript 3.0 do tipo de dados -bject difere das
versões anteriores de três formas. Primeiro, o tipo de dados -bject não é mais o tipo de dados padrão
atribuído a variáveis sem nenhuma anotação de tipo. Em segundo lugar, o tipo de dados -bject não inclui
mais o valor 
,°
,, que costumava ser o
valorpadrãodasocorrências-bject.Emterceirolugar,noActionScript3.0,ovalorpadrãoparaocorrênciasdaclas
se -bject é
.
Nas versões anteriores do ActionScript, uma variável sem nenhuma anotação de tipo era
automaticamente atribuída
aotipodedados-bject.IssonãoacontecemaisnoActionScript3.0,queagoraincluiaidéiadeumavariávelrealmen
te sem tipo. As variáveis sem nenhuma anotação de tipo agora são consideradas sem tipo. Se preferir
deixar mais claro
paraosleitoresdocódigoquesuaintençãoédeixarumavariávelsemtipo,vocêpodeusaronovosímbolodeasteris
co (!) para a anotação de tipo, que é equivalente a omitir uma anotação de tipo. - exemplo a seguir
mostra duas instruções equivalentes, que declaram uma variável sem tipo :

ð ð !

Somente variáveis sem tipo podem manter o valor 


,°
,. Se você tentar atribuir o valor 
,°
,a
uma
variávelquepossuiumtipodedados,oFlashPlayerouoAdobeAIRconverterãoovalor
,°
,novalorpadrão
dessetipodedados.Paraocorrênciasdotipodedados-bject,ovalorpadrãoé
,oquesignificaqueoFlashPlaye
r ou o Adobe AIR converterão o valor 
,°
,em
se você tentar atribuir 
,°
,a uma ocorrência
de -bject.
Ä
 * 

Uma conversão de tipo ocorre quando um valor é transformado em um valor de um tipo de dados
diferente. As conversões de tipo podem ser á  ou   . A conversão implícita, que também é
chamada de  , às vezes, é executada pelo Flash Player ou Adobe AIR em tempo de execução. Por
exemplo, se o valor 2 for atribuído a uma variável do tipo de dados Boolean, o Flash Player ou o Adobe
AIR converterá o valor 2 no valor booleano antes de atribuir o valor à variável. A conversão explícita,
também chamada de , ocorre quando o código instrui o compilador a tratar uma variável de um
tipo de dados como se pertencesse a um tipo de dados diferente. uando os valores primitivos estão
envolvidos, a projeção realmente converte os valores de um tipo de dados para
outro.Paraprojetarumobjetoemumtipodiferente,useparêntesesparadelimitaronomedoobjetoepreceda-
ocom o nome do novo tipo. Por exemplo, o seguinte código usa um valor booleano e projeta-o em um
inteiro:

ð 9
9
 ð ;
 
 9
  ; 66


 )  *

As conversões implícitas acontecem em tempo de execução em diversos contextos:

$ Em instruções de atribuição

$ uando os valores são transmitidos como argumentos de função

$ uando os valores são retornados de funções

$ Em expressões que usam determinados operadores, como o operador de adição ()

Para tipos definidos pelo usuário, as conversões implícitas são bem-sucedidas quando o valor a ser
convertido é uma ocorrência da classe de destino ou de uma classe derivada dela. Se uma conversão
implícita não for bem-
sucedida,ocorreráumerro.Porexemplo,oseguintecódigocontémumaconversãoimplícitabem-
sucedidaeoutra malsucedida:

 #57

 9
,#57

ð 4## 
 # 

ð 499 
 9 

ð  #  
 #  
4# 4966:
ð
,49  66:
ð
° 

Para os tipos primitivos, as conversões implícitas são tratadas chamando os mesmos algoritmos de
conversão
internosquesãochamadospelasfunçõesdeconversãoexplícitas.Asseçõesaseguirdiscutemessasconversõesd
e tipo primitivas em detalhes.


 )  *

Éútilusarconversõesexplícitas,ouprojeção,aocompilarnomodoestrito,porquepodehaversituaçõesemquevo

nãodesejaqueumaincompatibilidadedetiposgereumerroemtempodecompilação.Podeserocasodequandov
ocê sabe que a coerção converterá os valores corretamente em tempo de execução. Por exemplo, ao
trabalhar com dados
recebidosdeumformulário,vocêpodequerercontarcomacoerçãoparaconverterdeterminadosvaloresdeseqü
ência
decaracteresemvaloresnuméricos.-códigoaseguirgeraumerroemtempodecompilação,muitoemboraocódi
go seja executado corretamente no modo padrão:

ð -
0, 
. =A=

ð -

 -
0,66"
,

Sequisercontinuarausaromodoestrito,maspreferirconverteraseqüênciadecaracteresemuminteiro,vocêpod
e usar a conversão explícita da seguinte forma:

ð -
0, 
. =A=
ð -

 
 -
0, 66%"
ð
,

‰
+ '(
 ,  % 

Épossívelprojetarqualquertipodedadosemumdostrêstiposdenúmeros:int,uinteNumber.SeoFlashPlayerou
o Adobe AIR não conseguir converter o número por algum motivo, o valor padrão de 0 será atribuído aos
tipos de dados int e uint, e o valor padrão de  será atribuído para o tipo de dados Number. Se você
converter um valor Boolean em um número, se tornará o valor 1 e ° se tornará o valor 0.

ð 9
9
 
ð @;
 
 9

ð ;
 
 9

ð   9

  @;*;* 66
9
 ° 
@; 
 9

; 
 9

  9

  @;*;* 66)))
Ê

    
! 
 
  
 "  
 
 #Ê



#  
$  

 #
 


 
"  ")#Ê

  
  


  %

 %    
$   
&

!'
$  



 #
    
  ( 
 
    
 
        



 
)"

 

 
$   
 
' 

#


  
 =/= 66/
  
 =B/= 66M2M2H2;  " 
,°8#'&+#$@%
  
 == 66
  
 =A= 66A
  
 =A= 66A
  
 =)#= 66H
   =A= 66A

-s valores String que contêm caracteres não numéricos retornam 0 quando projetados com
 ou

 e  quando projetados com  . - processo de conversão ignora espaço em branco à
esquerda e à direita, mas retorna 0 ou  se uma seqüência de caracteres tiver espaço em branco
separando dois números.

  
 =/ = 66)
  
 =
= 66)
  
 =HA= 66)
No ActionScript 3.0, a função  não suporta mais números octais, ou de base 8. Se você fornecer
uma seqüência de caracteres com um zero à esquerda para a função  do ActionScript 2.0, o
número será interpretado como um número octal e convertido em seu equivalente decimal. Isso não
acontece com a função  no ActionScript 3.0, que em vez disso ignora o zero à esquerda. Por
exemplo, o seguinte código gera uma saída diferente quando compilado usando versões diferentes do
ActionScript:

   =)MM= 
66#
"A)MM
66#
")AH
('   

*       !  * 


   
 +
  
 
 
 

      



 

 


 


     " 
 
 *
 
 
Ê

 
"
   
 


 
 


ð @;

 BA66#.

6ð 
ð    @;
 66M2M2H2A

ð   "@;66#.

6
ð ð     66
M2M2H2A

ð ;

 
8#'&+#$@%66#.
ð 
ð    ;
 66)

;
 
8#'&+#$@%66#.

6ð 
ð    ;
 66B
MMNAHMN

(
 


 
' 

 
  
,    
 
   


ù          



    

            

´    ´ 


 

 
 
         


 

-        
    
      

  

        
       



 
       

      

   


,°
,    

      
    


A projecção para Boolean a partir de qualquer tipo de dados numérico (uint, int e Number) resultará em
° se o valor numérico for 0 e em se não for. Para o tipo de dados Number, o valor também
resulta em ° . - exemplo a seguir mostra os resultados da projecção dos números em -1, 0 e 1:

ð 

°  BF 

5

  =9
== =9
 
7

A saída do exemplo mostra que, dos três números, somente 0 retorna um valor° :

9
B 9
) ° 9
 

A projecção para Boolean de um valor String retornará ° se a seqüência de caracteres for
ou vazia
(==). Do contrário, retornará
.
ð  
.66@

 K,
.

  9
 66° 

ð  
. ==66"
.
  9
 66° 

ð A 
. ==66 !" 

  9
A 66
A projecção para Boolean de uma ocorrência da classe -bject retornará ° se a ocorrência for
; do
contrário, retornará :

ð 343466@

 K,4

  9
34 66° 

34 
 34 66

 
  9
34 66

AsvariáveisBooleanobtémtratamentoespecialnomodoestritonoqueserefereaatribuirvaloresdequalquertip
ode dados a uma variável Boolean sem projeção. A coerção implícita de todos os tipos de dados para o
tipo de dados
Booleanocorremesmonomodoestrito.Emoutraspalavras,diferentementedequasetodososoutrostiposdeda
dos, aprojecção
paraBooleannãoénecessáriaparaevitarerrosnomodoestrito.-sseguintesexemploscompilamnomodo
estrito e se comportam conforme o esperado em tempo de execução:

ð 3434 
 34 66

 
ð 9
 34
   66
 =
,
.=
   66
 
 #  
   66
  
   66° 

A tabela a seguir resume os resultados da projecção para o tipo de dados Boolean a partir de outros tipos
de dados:

ù          


 

  °     


  
        ==     


 ° 


     °            

 -   °      


 

  

D  

A projecção para o tipo de dados String de qualquer tipo de dados numérico retorna uma representação
de seqüência de caracteres do número. A projecção para o tipo de dados String de um valor Boolean
retornará a seqüência de caracteres ==se o valor for e retornará a seqüência de caracteres
=° =se o valor for ° .
A projecção para String de uma ocorrência da classe -bject retornará a seqüência de caracteres =
=se
a ocorrênciafor
.Casocontrário,aprojecção
paraotipoStringdaclasse-bjectretornaráaseqüênciadecaracteres =D434E=.

A projecção para String de uma ocorrência da classe Array retorna uma seqüência de caracteres incluindo
uma lista delimitadaporvírguladetodososelementosdamatriz.Porexemplo,aseguinteprojecção
paraotipodedadosString retorna uma seqüência de caracteres contendo os três elementos da matriz:
ð # #  D=" =*=
, =*= =E

  
. #  66" *
, * 

Aprojecção
paraStringdeumaocorrênciadaclasseDateretornaumarepresentaçãodaseqüênciadecaracteresdadata
queaocorrênciacontém.Porexemplo,oseguinteexemploretornaumarepresentaçãodaseqüênciadecaractere
sda ocorrência da classe Date (a saída mostra o resultado para o Horário de Verão do Pacífico):

ð 1 1  


 1  ))/*H* 

  
. 1  660O))))))8B)))))/

A tabela a seguir resume os resultados da projecção para o tipo de dados String a partir de outros tipos de
dados:

ù          


 

 
             
  
    ==  ° =

´ 
          ´

 =
=


     
         
 

-          =
=    =D434E=

 
Asintaxedeumalinguagemdefineumconjuntoderegrasquedeveserseguidoduranteaescritadecódigoexecutá
vel.

´   
   
 
-ActionScript3.0éumalinguagemquediferenciamaiúsculaseminúsculas.-sidentificadoresquediferemsome
nte em maiúsculas e minúsculas são considerados identificadores diferentes. Por exemplo, o código a
seguir cria duas variáveis diferentes:

ð 



ð 


     
-operadordot()forneceumamaneiradeacessaraspropriedadeseosmétodosdeumobjeto.Comousodasintax
e de pontos, é possível fazer referência a uma propriedade ou um método de classe usando um nome de
ocorrência, seguido do operador dot e do nome da propriedade ou do método. Por exemplo, considere a
seguinte definição de classe:

 1% "

5

"ð "" 


.

"°

!, ð,57

7

Com o uso da sintaxe de pontos, é possível acessar a propriedade ""e o método !, usando o
nome de ocorrência criado no seguinte código:
ð 1%1% " 
 1% " 
1%"" =!=
1%!, 

a

!

"  
  
Ê  
  
   
  
)"

- .


  
       
Ú   
   

  

 
 "


° !ð


Ú      %

- .

 
"


° !ð
%ð
1" !


   

A sintaxe de barras não é suportada no ActionScript 3.0. Ela foi usada nas versões anteriores do
ActionScript para indicar o caminho de um clipe de filme ou variável.

, 

Um  é um valor que aparece directamente em seu código. -s seguintes exemplos são de literais:


=!=
BA
2M


,°
,

° 

-s literais também podem ser agrupados para formar literais compostos. -s literais de matriz são
colocados entre colchetes (DE) e usam a vírgula para separar elementos de matriz.

Umliteraldematrizpodeserusadoparainicializarumamatriz.-sexemplosaseguirmostramduasmatrizesquesã
o inicializadas usando literais de matriz. É possível usar a instrução
 e transmitir o literal composto
como um
parâmetroparaoconstrutordeclasseArray,masvocêtambémpodeatribuirvaloresliteraisdiretamenteaoinsta
nciar ocorrências das seguintes classes centrais do ActionScript: -bject, Array, String, Number, int, uint,
XML, XMLList e Boolean.

66@
  

ð  
.#  
 #  D= "! =*= =*=.  =E 
ð #  
 #  D**A*/*NE 

66#.
 ,
ð  
.#  D= "! =*= =*=.  =E
ð #  D**A*/*NE
-s literais também podem ser usado para inicializar um objeto genérico. Um objeto genérico é uma
ocorrência da
classe-bject.-sliterais-bjectsãocolocadosentrechaves(57)eusamavírgulaparasepararpropriedadesdeobje
tos. Cada propriedade é declarada com o caractere dois-pontos (), que separa o nome da propriedade
do valor da propriedade.

Épossívelcriarumobjetogenéricousandoainstrução
 etransmitiroliteraldeobjetocomoumparâmetroparao
construtor de classe -bjeto ou atribuir o literal de objeto diretamente à ocorrência que você está
declarando. -
exemploaseguirdemonstraduasformasalternativasdecriarumnovoobjetogenéricoeinicializaroobjetocomtr
ês propriedades (""#, ""9e "":), cada uma com valores definidos como 1, 2, e 3, respectivamente:

66@
  

, ,,""
ð 3434 
 34 
34""# 
34""9 
34"": A

66#.
 ,
ð 3434 5""#*""9*"":A7

  
Você pode usar o caractere ponto-e-vírgula () para encerrar uma instrução. -pcionalmente, se omitir o
caractere ponto-e-vírgula, o compilador presumirá que cada linha de código representa uma única
instrução. Como muitos programadores estão acostumados a usar o ponto-e-vírgula para denotar o fim
de uma instrução, seu código poderá ser mais fácil de ler se você usar consistentemente ponto-e-vírgula
para encerrar as instruções.

-usodeumponto-e-
vírgulaparaencerrarumainstruçãopermitecolocarmaisdeumainstruçãoemumaúnicalinha, mas isso pode
tornar o código mais difícil de ler.

‰ #


Vocêpodeusarparênteses( )detrêsformasnoActionScript3.0.Primeiro,vocêpodeusarparêntesesparaaltera
ra
ordemdasoperaçõesemumaexpressão.Asoperaçõesquesãoagrupadasdentrodeparêntesessãosempreexec
utadas primeiro. Por exemplo, os parênteses são usados para alterar a ordem das operações no seguinte
código:

  A!M 66M  A !M 66)


Em segundo lugar, você pode usar parênteses com o operador vírgula (*) para avaliar uma série de
expressões e retornar o resultado da expressão final, como mostra o seguinte exemplo:

ð  
 

ð 
 A

  **  66

Emterceirolugar,vocêpodeusarparêntesesparatransmitirumoumaisparâmetrosparafunçõesoumétodos,co
mo mostra o exemplo a seguir, que transmite um valor String para a função  :

  =!= 66!

Ä 
  

-códigodoActionScript3.0oferecesuporteadoistiposdecomentários:comentáriosdeumaúnicalinhaedevária
s linhas. Esses mecanismos de comentários são semelhantes aos do C++ e ava. - compilador irá ignorar o
texto marcado com um comentário.

-s comentários de uma única linha começam com dois caracteres de barra inclinada (66) e continuam até
o fim da linha. Por exemplo, o seguinte código contém um comentário de uma única linha:

ð  A66 


.



-scomentáriosdeváriaslinhascomeçamcomumabarrainclinadaeumasterisco(6!)eterminamcomumasterisc
o e uma barra inclinada (!6).
6!!

! 
"
!


°,!6

‰ -!    

As  𠏏ð O sãopalavrasquenãopodemserusadascomoidentificadoresnocódigoporquesãoparaus


odo ActionScript. Elas incluem   ð   ð  , que são removidas do espaço para nomes do
programa pelo compilador. - compilador relatará um erro se você usar uma palavra-chave léxica como
identificador. A seguinte tabela lista as palavras-chave léxicas do ActionScript 3.0.

    

    

   

       




  

      

     

       

       

    

     

 

Há um pequeno conjunto de palavras-chave, chamado   ð   ð   , que pode ser usado


como identificador, mas têm um significado especial em determinados contextos. A tabela a seguir lista
as palavras-chave sintáticas do ActionScript 3.0.

    
    
   

  

Também há vários identificadores que, às vezes, são referidos como  𠏏ð O °

 . Eles não
são reservados pelo ActionScript 3.0, embora alguns sejam tratados como palavras-chave pelo software
que incorpora o
ActionScript3.0.Vocêpodeusarváriosdessesidentificadoresnoseucódigo,masaAdobenãorecomendaessaprá
tica porque eles podem aparecer como palavras-chave em uma versão subseqüente da linguagem.
     

      

       

          

     

    
Ä 
- ActionScript 3.0 oferece suporte à instrução 
, que você pode usar para criar constantes. As
constantes são
propriedadescomumvalorfixoquenãopodeseralterado.Vocêpodeatribuirumvaloraumaconstanteap
enasuma
vez,eaatribuiçãodeveocorrerpróximaàdeclaraçãodaconstante.Porexemplo,seumaconstantefordecl
aradacomo um membro de uma classe, você poderá atribuir-lhe um valor somente como parte da
declaração ou dentro do construtor de classe.

-seguintecódigodeclaraduasconstantes.Aprimeira,8;;8@8,temumvaloratribuídocomopartedainstr
uçãode
declaração.Asegunda,8#';8@8,temumvaloratribuídonoconstrutor.-bservequeesteexemploécompil
adoapenas
nomodopadrãoporqueomodoestritosópermitequeumvalordeconstantesejaatribuídoemtempodein
icialização.

 #

5

"
8;;8@8
 )

"
8#';8@8


"°

# 

5

8#';8@8 )

7

7

ð  # 
 #   8;;8@8 66)  8#';8@8 66)

Um erro será gerado se você tentar atribuir um valor inicial a uma constante de qualquer outra
forma. Por exemplo, se você tentar definir o valor inicial de 8#';8@8fora da classe, ocorrerá um
erro de tempo de execução.
 #

5

"
8;;8@8
 )

"
8#';8@8


7

ð  # 
 # 

D=8#';8@8=E )66
B

- ActionScript 3.0 define uma ampla gama de constantes para sua conveniência. Por convenção,
as constantes do ActionScript usam tudo em letras maiúsculas, com as palavras separadas pelo
caractere de sublinhado (&). Por exemplo, a definição de classe MouseEvent usa essa convenção
de nomenclatura para suas constantes, cada uma representando um evento relacionado à entrada
do mouse:

"  .° !ð




5

" 8%ð

,%ð


5

" 
:$;:< 
. ==

" 
13@9$%&:$;:< 
. =,:=" 

83@ %&13C 
. =1
=" 
83@ %&83+% 
. =8ð=



7

7

h  


   

Ainstruçãocondicional°permitetestarumacondiçãoeexecutarumblocodecódigoseessacondi
çãoexistir,
ouexecutarumblocodecódigoalternativoseelanãoexistir.Porexemplo,oseguintecódigotestaseovalor
excede
20, gera uma função   em caso afirmativo ou gera uma função   diferente em caso
negativo:

° G) 

5

  =G)= 

7



5

  =F )= 

7

Se não quiser executar um bloco de código alternativo, você poderá usar a instrução °sem a
instrução .

 
Épossíveltestarmaisdeumacondiçãousandoainstruçãocondicional°°.Porexemplo,ocódigoa
seguir não apenas testa se o valor excede 20, mas também se o valor é negativo:

° G) 

5

  =G)= 

7

° F) 

5

  =
. ð= 

7

Se uma instrução °ou for seguida de apenas uma instrução, a instrução não precisa ficar
entre chaves. Por exemplo, o código a seguir não usa chaves:

° G) 
  ="ð= 

° F) 

  =
. ð= 



  =)= 

Entretanto,aAdoberecomendaquevocêsempreusechaves,porquepoderáocorrerumcomportament
oinesperado se instruções forem adicionadas posteriormente a uma instrução condicional sem
chaves. Por exemplo, no código a seguir, o valor "ðé aumentado em 1 quer a condição
seja ou não avaliada como :

ð 


ð "ð
 )

° G) 

  ="ð= 

"ð

  "ð 66

-

A instrução  !será útil se você tiver vários caminhos de execução que dependam da mesma
expressão de
condição.Elaforneceumafuncionalidadesemelhanteaumalongasériedeinstruções°°,masém
aisfácil de ler. Em vez de testar uma condição quanto a um valor booleano, a instrução !avalia
uma expressão e usa o resultado para determinar qual bloco de código será executado. -s blocos
de código começam com uma instrução
 eterminamcomumainstrução .Porexemplo,aseguinteinstrução !imprimeodiadasema
na,com base no número de dias retornado pelo método 1 .1  :

ð 1 1  


 1  
ð , 
 1 .1  
 ! ,  
5
 )
  = 

, = 
 
 
  =8

, = 
 
 
  =
, = 
 
 A
  =C,

, = 
 
 M
  =!
, = 
 
 /
  =0
, = 
 
 H
  = 
, = 
 
,° 
  =3°
.= 
 
7

h  


     

As instruções de repetição permitem executar um bloco específico de código repetidamente


usando uma série de
valoresouvariáveis.AAdoberecomendaqueoblocodecódigosejasemprecolocadoentrechaves(57).Em
boraseja
possívelomitiraschavescasooblocodecódigocontenhaapenasumainstrução,essapráticanãoérecome
ndadapelo mesmo motivo que para as condicionais: ela aumenta as chances de que as instruções
adicionadas em um momento posterior sejam excluídas inadvertidamente do bloco de código. Se,
mais tarde, você adicionar uma instrução que deseja incluir no bloco de código, mas esquecer de
adicionar as chaves necessárias, a instrução não será executada como parte da repetição.

 
( °       * 
!  

Ú   
"



 ° *  
  
 
        "

  *
  )"/ 
   
Ê 
 * 0 1
! 
*
 #
 01 

/  

ð 


°  )F/ 

5

   

7

  
( °
  
   
 ' 
 
 
 )"
  
 °
   
   
'  

   
 ' 
  
 
! 


 
   / 

ð 3434 5)*A)7

° ð  


.
34 

5

  ==34DE 

7

66"

66)

66A)

&

!   
 
  

ð # #  D=


=*= =*=!=E

° ð  


.
#  
5

  # DE 

7

66"

66


66 

66!

Ê       


   
 '
 
   


 
*  



' 2 +
  



2


*

! 
      
    
   

    
( ° !
  
 
  '  


'3+43+44


  

   
 '

 
  )"

   

 ° !
   
   
 '  

    °
 *    ° !

            

ð 3434 5)*A)7
° ! ð 

34 
5
 
 
7
66"
66)
66A)

Ú     '3+43+44




 
"
ð '8$'8$ FG

GO
F6°
G

G 
F6°
G

GO!
F6°
G
F6G

° ! ð 


'8$°
 
5
   
7
6!"
O








O

!


!6

Também é possível iterar por meio dos elementos de uma matriz, como mostra este exemplo:

ð # #  D=


=*= =*=!=E
° ! ð 
#  
5
   
7
66"
66

66 
66!

Vocênãopoderáiterarpormeiodaspropriedadesdeumobjetoseoobjetoforumaocorrênciadeumaclass
eselada. Mesmo para ocorrências de classes dinâmicas, não é possível iterar por meio de uma
propriedade fixa, que é a propriedade especificada como parte da definição de classe.

 
A repetição !é como uma instrução °que é repetida desde que a condição seja . Por
exemplo, o código a seguir produz a mesma saída que o exemplo da repetição °:

ð 
 )

! F/ 

5

   



7
ö 
  
   ! ° 



*

   
 ! Ê "    ° 

*   
       "

    


 *   
"   !
*  


 
  "

    


  

(  , !  !  / 


'"
 

    
" Ê/ 
  

"

   , ! 
!  
  
  
'  
ð 


 
/
,

5













7 ! F/ 
66"/

You might also like