Riprendiamo il nostro codice di esempio del TicTacToe (che trovate per intero su Google Code) e iniziamo ad analizzarlo in dettaglio.
Importare le definizioni
Con Actionscript 3.0 è stato fatto un grande lavoro di pulizia e sistemazione nell’alberatura delle classi (contenute nei pacchetti, package) utilizzate durante lo sviluppo. In altri linguaggi di programmazione, come il C ad esempio, quando si desidera utilizzare una funzionalità bisogna esplicitamente “importarla” nel codice. Questa operazione di “importazione” è necessaria per permettere al compilatore di avere tutti i codici e le definizioni legate alla funzionalità che vogliamo usare. In Actionscript 3.0, tuttavia, l’istruzione import non va confusa con l’equivalente C/C++ #include; Actionscript 3.0 mette a disposizione l’istruzione include che è identica all’#include del C/C++. Quest’ultima, infatti, “include” effettivamente del codice che, se usato o meno, viene compilato nell’eseguibile finale. L’istruzione import è di più alto livello e risulta più “intelligente” in fase di compilazione. Essa serve principalemente per accedere alle classi senza doverne specificare il nome completo. In alre parole invece di usare forme del tipo:
Importando la definizione dallo specifico pacchetto (o libreria se preferite), si ottiene il più semplice e leggibile:
Nel nostro esempio, all’interno della dichiarazione del package della classe, troviamo subito tre import:
1 2 3 | import flash.display.*; import flash.events.*; import flash.text.*; |
Il primo import rende disponibili tutte le classi e le definizioni all’interno del package flash.display. In alternativa avremmo potuto sostituire l’intero pacchetto con l’importazione (mirata) delle singole classi e definzioni che usiamo, ovvero:
1 2 3 4 5 | import flash.display.DisplayObject; import flash.display.MovieClip; import flash.display.Stage; import flash.display.StageAlign; import flash.display.StageScaleMode; |
Questa operazione di “dettaglio” non è comunque necessaria ai fini del risultato finale. Se una classe importata non viene utilizza nello script, non viene – intelligentemente – esportata nel file SWF.
Questo significa che è possibile importare pacchetti di grandi dimensioni senza doversi preoccupare delle dimensioni del file SWF; il codice byte associato a una classe viene incluso in un file SWF solo se tale classe viene effettivamente utilizzata.
Al massimo, se esageriamo con gli “asterischi”, cioè con sintassi come flash.*, possiamo avere un “leggero” rallentamento durante la fase di compilazione! Nella “vita di tutti i giorni”, dunque, è possibile utilizzare in tutta tranquillità la sintassi usata nel nostro esempio.
Costanti statiche
Ecco un’altra caratteristica interessante di Actionscript 3.0: le costanti statiche. Nell’esempio ne ho introdotte alcune a titolo di esempio:
1 2 3 |
È curioso notare che la stessa sequenza può essere scritta come:
1 2 3 |
Lasciando da parte queste “curiosità” dell’ambiente Flash CS3, diciamo che le variabili o costanti statiche sono associate alla classe e non all’istanza della classe! Vedi Classi, Oggetti e Istanze. Questa è una differenza importantissima, infatti nel nostro caso se scriviamo – a titolo di esempio:
1 2 | var ttt:TicTacToe = new TicTacToe(); trace( ttt.AUTHOR ); // errore |
Verrà generato un errore. Questo perchè le costanti o variabili statiche vengono associate direttamente alla definizione della classe stessa e non ad una sua istanza. Il modo corretto è:
1 | trace( TicTacToe.AUTHOR ); // Giovambattista Fazioli <g.fazioli@undolog.com> |
Le costanti o variabili statiche hanno la caratteristche di non essere “istanziate” più volte. Vengono usate in tutte quelle situazioni dove il valore memorizzato (sia sotto forma di variabile che sotto forma di costante) rimane valido per tutte le istanze di quella classe e quindi può essere condiviso con tutti i “figli”.
Variabili e Costanti
È facile intuire la sostanziale differenza tra variabile e costante, essendo il nome stesso auto esplicativo. È bene tuttavia spiegarlo visto che ne abbiamo appena parlato. Una variabile è uno spazio riservato ad un dato (numerico, stringa, booleano, etc…) che può (o deve) mutare il suo valore durante l’esecuzione di un codice. Al contrario le costanti sono spazi riservati a dati che non mutano mai il loro valore durante l’esecuzione di un codice: rimangono costanti! Si veda al riguardo Costanti e variabili: qual’è la vera differenza?.
In Actionscript 3.0, come in altri linguaggi, le costanti possono essere impostate solo una volta: direttamente durante la definizione o successivamente nel codice:
1 2 3 4 5 6 7 8 9 10 11 |
La prossima volta proseguiremo l’analisi del codice e daremo un’occhiata ai “tipi” dato, argomento interessante ed importante con la release 3.0 di Actionscript.








7
Would be better in english. This just doesn’t make sense. Not very readable this way. Please write in english, publish in english. Or have a real translater translate it.
(cause some internet translater isnt good enough. I got a badly translated site into dutch.)
@NoCode:
I am sorry but it would be too expensive for me to write in Italian and English!