segue dalla terza parte
“Moonlight Bay” (ovvero: “chiedi chi erano i vectors”)
L’unica struttura dati disponibile in Lua è rappresentata dagli array o meglio, dalle tabelle (o hash): array associativi formati da coppie chiave-valore, nelle quali sia la chiave sia il valore possono essere qualsiasi tipo di dato. Vediamo un paio di esempi, dapprima un normale vettore:
> i = 3
> a = {1,3,5,7,9}
> print(i,a[3],a[4],a[i+3])
questa sequenza stampa i valori 3,5,7,nil; la prima cosa che appare diversa rispetto ad un altro linguaggio è che gli indici per gli array partono da 1 anziché da zero; la seconda è che un eventuale sforamento dell’array non causa errore ma semplicemente ritorna nil. Le tabelle Lua sono flessibili… Esploriamole con un esempio di complessità crescente.
>band={ Paul='basso', Ringo='batteria', George='chitarra', John='chitarra'}
>print(band['Ringo'])
batteria
ma anche, con una sintassi semplificata:
>print(band.Ringo)
batteria
E ovviamente funziona anche in modifica:
>band.Paul='chitarra'
È semplice aggiungere nuovi elementi (anche se gli effetti non sono sempre positivi!):
>band.Yoko='sitar'
se volessimo vedere il contenuto di tutta la tabella, non basterebbe un semplice print band, ma occorrerà iterare sui singoli elementi:
>for k,v in pairs(band) do print(k,v) end
I fans saranno felici di sapere che basta impostare un elemento a nil per rimuoverlo dalla tabella:
>band.Yoko=nil
Come dicevamo, un hash può contenere qualsiasi tipo di dato, comprese altre tabelle:
>band.tour={“Londra”,”Parigi”,”Madrid”,”Roma”}
>for city in 1,4 do print(band.tour[city]) end
e via complicando:
>band.playlist={
>>{titolo=“Love me do”,voto=8.5},
>>{titolo=”Let it be”, voto=8},
>>yday={titolo=”Yesterday”,voto=7.5},
>>help={titolo=”Help”,voto=7.5}
>>}
possiamo accedere ai singoli elementi delle sotto-tabelle con la sintassi
>print(band['tour'][1])
o più semplicemente
>print(band.tour[1])
e in maniera analoga, avendo assegnato delle reference agli elementi, richiamarli per nome:
>print(band.playlist.help.voto)
Anticipo che quando gli elementi di una tabella sono funzioni, otteniamo un comportamento object-oriented:
>function suona(song)
>>print(“Stiamo suonando”,song)
>>end
>band.playfunc=suona