Introduzione ad ActionScript 3.0

Informazioni su ActionScript

ActionScript è il linguaggio di programmazione per gli ambienti runtime Adobe® Flash® Player e Adobe® AIR™. Rende possibili l'interattività, la gestione dei dati e molte altre operazioni relative al contenuto e alle applicazioni Flash, Flex e AIR.

ActionScript viene eseguito dall'AVM (ActionScript Virtual Machine), che fa parte di Flash Player e AIR. Il codice ActionScript viene solitamente trasformato in formato codice byte ( una sorta di linguaggio di programmazione generato e interpretato dai computer) mediante un compilatore. Esempi di compilatori includono quello incorporato in Adobe® Flash® Professional o in Adobe® Flash® Builder™ e disponibile nell'SDK di Adobe® Flex™. Il codice byte viene incorporato in file SWF, che vengono quindi eseguiti in Flash Player e AIR.

ActionScript 3.0 offre un solido modello di programmazione che risulta familiare agli sviluppatori che hanno un'esperienza di base nella programmazione a oggetti. Alcune funzioni chiave di ActionScript 3.0 che comprendono miglioramenti rispetto alle versioni precedenti di ActionScript comprendono:

  • una nuova macchina virtuale ActionScript, detta AVM2, che utilizza un nuovo set di istruzioni per il codice byte e garantisce un notevole miglioramento delle prestazioni;

  • una base di codice del compilatore più moderna che garantisce ottimizzazioni più complete rispetto alle versioni precedenti del compilatore;

  • un'API (Application Programming Interface) estesa e migliorata, con controllo di basso livello degli oggetti e modello realmente orientato agli oggetti;

  • un'API XML basata su ECMAScript for XML (E4X), come indicato nella specifica ECMA-357 edizione 2. E4X è un'estensione di ECMAScript che aggiunge XML al linguaggio come tipo di dati nativo;

  • un modello di eventi basato sulla specifica degli eventi DOM (Document Object Model) Livello 3.

Vantaggi di ActionScript 3.0

ActionScript 3.0 estende le funzionalità delle versioni precedenti del linguaggio di script ActionScript. È concepito per facilitare la creazione di applicazioni sofisticate con set di dati di grandi dimensioni e con basi di codice a oggetti e riutilizzabili. Sebbene ActionScript 3.0 non sia obbligatorio per creare contenuto da eseguire in Adobe Flash Player, la nuova versione garantisce miglioramenti delle prestazioni possibili solo con AVM2 (la macchina virtuale di ActionScript 3.0). Il codice ActionScript 3.0 può essere eseguito a una velocità fino a otto volte maggiore rispetto al codice ActionScript delle versioni precedenti.

La versione precedente della macchina virtuale ActionScript, AVM1, è in grado di eseguire codice ActionScript 1.0 e 2.0. Flash Player 9 e 10 supportano AVM1 per compatibilità con le versioni precedenti.

Nuove funzionalità di ActionScript 3.0

Sebbene ActionScript 3.0 contenga molte classi e caratteristiche simili a ActionScript 1.0 e 2.0, la nuova versione del linguaggio è concettualmente e “architettonicamente” diversa da quelle precedenti. I miglioramenti introdotti in ActionScript 3.0 riguardano varie caratteristiche aggiunte al linguaggio di base e un'API di migliorata, che offre un maggiore controllo sugli oggetti di basso livello.

Caratteristiche del linguaggio di base

Il linguaggio di base (core language) definisce i blocchi costitutivi del linguaggio di programmazione, quali le istruzioni, le espressioni, le condizioni, i cicli e i tipi. ActionScript 3.0 include molte caratteristiche che consentono di velocizzare il processo di sviluppo.

Eccezioni runtime

ActionScript 3.0 segnala più condizioni di errore rispetto alle versioni precedenti del linguaggio. Le eccezioni runtime sono utilizzate per le condizioni di errore più comuni e consentono di migliorare il lavoro di debug e di sviluppare applicazioni più efficienti nella gestione degli errori. Per gli errori runtime sono disponibili tracce di stack annotate con l'indicazione del file di origine e del numero di riga, che consentono una rapida individuazione degli errori.

Tipi runtime

In ActionScript 3.0, le informazioni sul tipo vengono mantenute in fase di runtime e utilizzate per eseguire la verifica del tipo in fase di runtime, migliorando la sicurezza dei tipi nel sistema. Le informazioni sul tipo vengono utilizzate anche per indicare le variabili nelle rappresentazioni native dei sistemi, migliorando le prestazioni e riducendo l'uso di memoria. Per fare un confronto, in ActionScript 2.0 le annotazioni di tipo sono principalmente un aiuto per lo sviluppatore e a tutti i valori viene assegnato un tipo in modo dinamico.

Classi chiuse

ActionScript 3.0 include il concetto di classe chiusa (sealed). Una classe chiusa possiede unicamente le proprietà e i metodi definiti in fase di compilazione e non consente l'aggiunta di ulteriori proprietà o metodi. L'incapacità di modificare una classe in fase di runtime consente verifiche più rigorose in fase di compilazione e permette di sviluppare programmi più solidi. Inoltre, migliora l'uso della memoria perché non è necessaria una tabella di hash interna per ogni istanza di oggetto. Le classi dinamiche possono essere specificate mediante la parola chiave dynamic . Tutte le classi di ActionScript 3.0 sono chiuse (“sealed”) per impostazione predefinita, ma possono essere dichiarate dinamiche mediante la parola chiave dynamic .

Chiusure di metodo

In ActionScript 3.0 una chiusura di metodo è in grado di memorizzare la propria istanza di oggetto originale. Questa caratteristica è utile per la gestione degli eventi. In ActionScript 2.0, le chiusure di metodo non memorizzano l'istanza di oggetto dalla quale venivano estratte e si verifica pertanto un comportamento inatteso quando una chiusura di metodo viene chiamata.

ECMAScript for XML (E4X)

ActionScript 3.0 implementa ECMAScript for XML (E4X), recentemente standardizzato come ECMA-357. E4X offre una serie funzionale di costrutti di linguaggio per la gestione del codice XML. A differenza delle tradizionali API di analisi XML, in E4X XML viene elaborato come tipo di dati nativo del linguaggio. E4X sveltisce lo sviluppo di applicazioni che utilizzano il codice XML riducendo drasticamente la quantità di codice richiesta.

Per visualizzare la specifica E4X di ECMA, visitate il sito Web www.ecma-international.org .

Espressioni regolari

ActionScript 3.0 include il supporto nativo per le espressioni regolari e permette quindi di trovare e modificare rapidamente stringhe di codice. ActionScript 3.0 implementa il supporto delle espressioni regolari così come sono definite nella specifica del linguaggio ECMAScript edizione 3 (ECMA-262).

Spazi dei nomi

Gli spazi dei nomi (namespace) sono simili ai tradizionali specificatori di accesso utilizzati per controllare la visibilità delle dichiarazioni ( public , private , protected ). Funzionano come specificatori di accesso personalizzati, ai quali è possibile assegnare un nome a piacere. Gli spazi dei nomi includono un URI (Universal Resource Identifier) per evitare possibili conflitti e vengono utilizzati anche per rappresentare gli spazi dei nomi XML quando si lavora con il linguaggio E4X.

Nuovi tipi di base

ActionScript 3.0 contiene tre tipi numerici: Number, int e uint. Number corrisponde a un numero a virgola mobile e precisione doppia. Il tipo int è un numero intero a 32 bit con segno, che consente al codice ActionScript di sfruttare la velocità di elaborazione matematica dei numeri interi della CPU. È utile nei contatori di ciclo e nelle variabili in cui sono utilizzati i numeri interi. Il tipo uint è un numero intero a 32 bit senza segno, utile per i valori di colore RGB, i conteggi di byte e altre situazioni. Per contro, ActionScript 2.0 dispone di un unico tipo numerico, Number.

Caratteristiche dell'API

Le API di in ActionScript 3.0 contengono molte classi che consentono di controllare gli oggetti a basso livello. L'architettura del linguaggio è progettata per essere più intuitiva rispetto alle versioni precedenti. Sebbene il numero delle classi sia troppo elevato per poterle descrivere tutte in dettaglio, è opportuno sottolineare alcune differenze significative.

Modello di eventi DOM3

Il modello di eventi DOM 3 (Document Object Model Level 3) fornisce una modalità standardizzata per la generazione e la gestione dei messaggi di evento. Questo modello di eventi è progettato per consentire agli oggetti delle applicazioni di interagire e comunicare, mantenendo il proprio stato e reagendo ai cambiamenti. Il modello di eventi ActionScript 3.0 è realizzato in base alla Specifica degli eventi DOM Level 3 del World Wide Web Consortium e offre un meccanismo più semplice ed efficiente rispetto agli eventi di sistema disponibili nelle versioni precedenti di ActionScript.

Gli eventi e gli errori si trovano nel pacchetto flash.events. I componenti Flash Professional e il framework Flex utilizzano lo stesso modello di eventi, quindi il sistema di eventi è uniforme in tutta la piattaforma Flash.

API dell'elenco di visualizzazione

L'API per l'accesso all'elenco di visualizzazione, l'albero contenente gli eventuali elementi visivi nell'applicazione, è composta da classi per utilizzare valori di base visivi.

La classe Sprite è un blocco strutturale leggero, progettato come classe base per elementi visivi quali interfacce e componenti. La classe Shape rappresenta le forme vettoriali raw. Per queste classi è possibile creare “naturalmente” le istanze con l'operatore new , nonché riassegnare dinamicamente l'elemento principale in qualunque momento.

La gestione della profondità è automatica. Sono disponibili dei metodi per specificare e gestire l'ordine di impilamento degli oggetti.

Gestione di dati e contenuti dinamici

ActionScript 3.0 include dei meccanismi intuitivi e uniformi nell'intera API per il caricamento e la gestione di risorse e dati nell'applicazione La classe Loader fornisce un sistema unico per il caricamento di file SWF e immagini e permette di accedere a informazioni dettagliate sul contenuto caricato. La classe URLLoader offre un meccanismo distinto per il caricamento di testo e dati binari nelle applicazioni basate su dati, mentre la classe Socket permette di leggere e scrivere dati binari nei socket server in qualunque formato.

Accesso di basso livello ai dati

Varie API forniscono accesso di basso livello ai dati. Per i dati in corso di scaricamento, la classe URLStream permette di accedere ai dati in formato raw binario mentre vengono scaricati. La classe ByteArray consente di ottimizzare la lettura, la scrittura e la gestione dei dati binari. L'API Sound fornisce un controllo dettagliato del suono mediante le classi SoundChannel e SoundMixer. API relative alla sicurezza forniscono informazioni sui privilegi di sicurezza di un file SWF o di un contenuto caricato, consentendo la gestione degli errori di sicurezza.

Operazioni con il testo

Il pacchetto flash.text di ActionScript 3.0 contiene tutte le API relative al testo. La classe TextLineMetrics fornisce dati metrici dettagliati per una riga di testo all'interno di un campo di testo; sostituisce il metodo TextFormat.getTextExtent() in ActionScript 2.0. La classe TextField contiene metodi di basso livello in grado di fornire informazioni specifiche su una riga di testo o un singolo carattere in un campo di testo. Ad esempio, il metodo getCharBoundaries() restituisce un rettangolo che rappresenta il riquadro di delimitazione di un carattere. Il metodo getCharIndexAtPoint() restituisce l'indice del carattere in un punto specifico. Il metodo getFirstCharInParagraph() restituisce l'indice del primo carattere di un paragrafo. I metodi a livello di riga includono getLineLength() , che restituisce il numero di caratteri di una riga di testo specifica, e getLineText() , che restituisce il testo della riga specificata. La classe Font consente di gestire i caratteri incorporati nei file SWF.

Per un controllo sul testo di livello ancora più basso, le classi nel pacchetto flash.text.engine costituiscono Flash Text Engine. Questo set di classi fornisce controllo di basso livello sul testo ed è progettato per creare framework e componenti di testo.