Flash Actionscript 3 "Tricks" Parte 2

Parte 2: Risparmiare righe di codice

Inserito il 30-11-2008

Una delle lamentele più gettonate sull'utilizzo di AS3 è senz'altro quella di un uso esagerato di righe di codice rispetto al passato, per fare la stessa cosa. Ebbene in questa parte dei "tricks" cercherò di raccogliere un paio di modi per gestire delle situazioni con meno righe di codice, considerando che però a volte la troppa compressione va a discapito della facilità di lettura del codice.

La prima situazione che fa sprecare più righe di codice di quanto faceva in passato è quella di aggiungere dinamicamente un clip alla visualizzazione sullo stage, infatti è prima necessario crearlo e poi bisogna aggiungerlo alla visualizzazione con addChild. Ma volendo possiamo comprimere il codice in una sola riga utilizzando la parola chiave as, di seguito l'esempio dei due casi:

// questo è il metodo classico, creo prima il movieclip su una riga e poi lo aggiungo con un'altra riga
var myClip:MovieClip = new MovieClip();
addChild(myClip);
/* ma se voglio usare una sola riga, posso creare il clip e 
assegnargli direttamente il suo tipo  attraverso la parola chiave "as"
e quindi letteralmente starei dicendo "crea il clip myClip attaccandolo
direttamente sullo stage come se fosse un MovieClip */
var myClip:MovieClip = addChild (new MovieClip()) as MovieClip;

A prima vista la cosa sembra un tantino contorta, ma bisogna considerare che la funzione addChild restituirebbe normalmente un oggetto DisplayObject e perciò in fase di compilazione ci sarebbe un errore, perchè noi tentiamo di creare un MovieClip, ma usiamo una funzione che crea un DisplayObject, così utilizzando as vincoliamo l'oggetto creato ad assumere la forma di un MovieClip.

Un'altra situazione in cui le righe di codice potrebbero sprecarsi senza motivo è quando si effettuano caricamenti esterni, infatti per caricare un file esterno bisogna prima creare un oggetto URLRequest a cui si passa il link, e poi bisogna passare lo stesso oggetto al Loader o URLLoader (in caso si stessero caricando dei dati):

/* volendo essere prolissi dovremmo creare l'oggetto URLRequest
poi dovremmo passargli il link, poi dovremmo creare l'oggetto 
URLLoader e usare la sua funzione load passandogli l'URLRequest
il tutto in non meno di 4 righe */
var u:String = "test.txt";
var r:URLRequest = new URLRequest();
r.url = u;
var l:URLLoader = new URLLoader();
l.load (r);
/* ma visto che sia l'URLRequest che l'URLLoader possono 
passare al proprio costrutture direttamente i dati per il caricamento,
possiamo risolvere lo stesso in una sola riga di codice in questo modo */
var l:URLLoader = new URLLoader (new URLRequest("test.txt"));

Lo stesso accadrebbe pressappoco per il Loader, a cui però non è possibile passare direttamente l'URLRequest, ma bisogna necessariamente usare la funzione load per caricare il file esterno, avendo in finale due righe di codice per il caricamento e la visualizzazione:

var l:Loader = addChild(new Loader()) as Loader;
l.load (new URLRequest("test.jpg"));

Spero che gli esempi visti nell'articolo possano aiutare ad ottimizzare il codice di chi legge e possano servire da base per scoprire anche le altre compressioni possibili sul codice AS3, saluti.