Actionscript 3.0 for beginners: lesson #4

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:

1
var myMC:flash.display.MovieClip = new flash.display.MovieClip();

Importando la definizione dallo specifico pacchetto (o libreria se preferite), si ottiene il più semplice e leggibile:

1
2
3
import flash.display.MovieClip;
//
var myMC:MovieClip = new MovieClip();

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
static public const NAME    :String = "TicTacToe";
static public const VERSION :String = "1.0";
static public const AUTHOR  :String = "Giovambattista Fazioli <g.fazioli@undolog.com>";

È curioso notare che la stessa sequenza può essere scritta come:

1
2
3
public static const NAME    :String = "TicTacToe";
public static const VERSION :String = "1.0";
public static const AUTHOR  :String = "Giovambattista Fazioli <g.fazioli@undolog.com>";

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
class Esempio {
    public const COSTANTE_A:int = 0;
    public const COSTANTE_B:int;
    // costruttore
    public function Esempio() {
        COSTANTE_B = 10;
    }
}
var sample:Esempio  = new Esempio ();
trace( sample.COSTANTE_A ); // 0
trace( sample.COSTANTE_B ); // 10

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.

3 commenti a: “ ”

  1. 18 feb, 2009 NoCode:

    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.

  2. 18 feb, 2009 NoCode:

    (cause some internet translater isnt good enough. I got a badly translated site into dutch.)

  3. 18 feb, 2009 Giovambattista Fazioli:

    @NoCode:
    I am sorry but it would be too expensive for me to write in Italian and English! :(

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
                   <code></code> // blocco generico
                   [cc_actionscript][/cc_actionscript] // Actionscript
                   [cc_actionscript3][/cc_actionscript3] // Actionscript 3
                   [cc_css][/cc_css] // CSS Style Sheet
                   [cc_html][/cc_html] // HTML
                   [cc_js][/cc_js] // Javascript
                   [cc_objc][/cc_objc] // Objective-C
                   [cc_php][/cc_objc] // PHP
                   [cc_sql][/cc_sql] // SQL