ActionScript, ActionScript 3, Flash

AS3 la classe Dictionary

Dictionary AS3

Purtroppo non mi sono mai imbattuto in oggetti di questo tipo, ma non sono molto ferrato in linguaggi di programmazione “seri”, quindi spero di essere smentito.

Sostanzialmente un Dictionary funziona grossomodo come un array, o un oggetto, ma ci√≤ che lo distingue da questi due pilastri √® ci√≤ che lo render√† indispensabile anche nelle routine pi√π pallose 😀
Ora mi spiego meglio:

Un array ha un indice numerico

myArray[0] = "ciccio";
myArray[1] = 1982;
myArray[2] = {x:10,y:"20"};

lo si pu√≤ scorrere facendo passare delicatamente un “int” adeguatamente lubrificato tra le sue cellette quadrate e lui vi sputer√† fuori il suo inquilino (uuu, sembro quasi tarantino :D).

Un oggetto ha degli attributi (stringhe) , i cui valori possono avere qualsiasi tipo

myObject["ciccio"] = "stringa";
myObject["pippo"] = 1;
myObject["carissimo"] = myArray;

anche qui ciclando usciranno i valori dei vari rami dell’oggetto.

ora, il Dictionary.
Un Dictionary si presenta cosi’:

myDictionary[qualsiasicosa] = qualsiasicosa;

Sostanzialmente è un oggetto i cui attributi possono essere a loro volta oggetti, array, stringhe, numeri, qualsiasi cosa.
Un esempio di “routine” potrebbe essere la creazione di un menu.
Normalmente la procedura sarebbe quella di crearsi un array con i valori da associare ai pulsanti del menu che, una volta cliccati, avrebbero inviato il dato dell’array ad una funzione che avrebbe “fatto qualcosa” in base alla corrispondenza tra il valore assegnato all’item del menu e quello dell’array.
Con un Dictionary si salta un passaggio. Perchè creare un array di valori quando posso usare il mio item come valore?

myDictionary[myItem] = funzione

Oppure un videogame, dove ad ogni sprite si associa una lista di valori senza doverlo identificare in base ad una stringa o un indice numerico.
Oppure come succede in PaperVision, dove il dictionary fa da agenzia matrimoniale tra la lista degli elementi nella scena 3D (camera, plane, ecc) e la lista degli elementi presenti nello stage (sprite, mc, ecc) [ma forse √® meglio che non ci spingiamo troppo oltre… :D]

Ok, adesso apriamo il cofano e diamo uno sguardo al motore.
Dictionary usa un tipo di corrispondenza stretta ( === ) per identificare gli oggetti.
Quindi se avessi come indice di un Dictionary un oggetto e passassi al Dictionary una copia dell’oggetto stesso otterrei lo stesso risultato:

var o1:Object = new Object();
var o2:Object = o1;

myDictionary[o1] == myDictionary[o2]; //( o2 è la referenza di o1, quindi o1 === o2)

idem se usassi stringhe identiche, o stessi numeri (la corrispondenza stretta serve a questo).
Ma proprio a causa della ricerca di corrispondenza stretta se o1 e o2 fossero due oggetti distinti (e non uno la referenza dell’altro) avrei di conseguenza due corrispondenze distinte anche nell’oggetto Dictionary.

Infine i cicli:
di può esplorare un Dictionary con i for..in o i for..each.

B√®, questo Dictionary merita davvero qualche esperimentuccio 😀

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s