I valori nel Lua      

I valori nel Lua

Nel Lua i valori utilizzabili sono: numeri, stringhe, booleani, tabelle, funzioni, nil.
N.B. nel Lua, quando si crea una variabile non è necessario definire il tipo di valore che conterrà (quindi a differenza di altri linguaggi, non è necessario inizializzare le variabili), perché la variabile riconosce il tipo, dal valore o dall’oggetto che vi è assegnato.
Per questa caratteristica, vengono chiamate variabili di tipo dinamico.
Es.
i = 1 (sarà una variabile numerica)
tmp = "ciao" (sarà una stringa)
animOmb = { n=8, "i", "j", "c", "d", "e", "f", "g", "h"} (sarà una tabella)

Numeri

I numeri possono essere interi o decimali, possono essere anche valori di tipo esponenziale (es. 1.2345e6 o 1.2345E6 = 1234500)
Si può assegnare un valore ad una variabile usando l’operatore =. E la variabile in questione viene creata nel momento in cui gli viene assegnato il valore.
Es.
x = 7
Una volta assegnato un valore ad una variabile si può utilizzare il valore assegnatogli per fare ulteriori calcoli, ad esempio un’operazione aritmetica semplice usando i soliti operatori (addizione, sottrazione, moltiplicazione e divisione).
Es.
x = 7
x = x * 9 questa istruzione assegnerà alla variabile x un nuovo valore
Es.
a = 7
b = 10
c = a + b

Stringhe

Le stringhe sono valori di tipo testuale.
Le stringhe possono essere definite usando apici ('ciao'), virgolette (“ciao”) o doppia parentesi quadra ([[ciao]]).
Il motivo per cui esistono così tanti modi di creare una stringa, è per dare la possibilità di racchiudere alcuni caratteri che altrimenti si dovrebbe utilizzare un codice di escape.
Es.
tmp = “ciao “questa” è una stringa”
in questo caso, la presenza di “ all’interno della stringa, può confondere, perché non si capisce bene dove finisce la stringa.
E quindi, usare un altro delimitatore, risolve il problema:
tmp = ‘ciao “questa” è una stringa’
Ovviamente potrebbero esserci casi in cui nella stringa ci sia la presenza di tutti i delimitatori, in questo caso si ricorre ai codici di escape, che sono indicati dopo.

Questi valori stringa possono essere assegnati alle variabili come i numeri.
Es.
chi = "utente"
Non si possono usare operatori aritmetici per unire le stringhe, ma possono essere unite usando l’operatore di concatenazione "..".

Es.
concatena = "ciao" + chi ? “chi” è la variabile assegnata prima, ma questa linea restituisce errore
concatena = "ciao" .. chi = ciao utente ? corretta

Sequenze di Escape

Il Lua può utilizzare sequenze di escape in stile linguaggio C (per chi lo conosce). In pratica, le sequenze di escape, servono a risolvere il problema di quando si trovano più delimitatori stringa nella stringa stessa.
Riprendendo l’esempio di prima:
tmp = “ciao “questa” è una stringa”
poteva essere scritta utilizzando il comando di escape \
tmp = “ciao \”questa\” è una stringa”
in pratica, \” viene automaticamente trasformato in “, ma non si ha il problema di ambiguità per quale è delimitatore stringa e quale è il carattere della stringa.
Di conseguenza, \’ è per il singolo apice, e \\ per la singola \.
Maggiori dettaglia nel Manuale, sezione 2.1.
Possiamo utilizzare anche i caratteri di escape per indicare codici non facili da inserire; tipo gli “a capo” oppure i tabulatori.
Es.
'ciao\nNuova linea\tTabulatore'
risulta
ciao
Nuova linea Tabulatore

Il \n (come anche \r) indicano un “a capo”. Il tabulatore indica una serie di spazi fissi (di solito 8).
Se per la definizione della stringa, vengono utilizzate le doppie parentesi quadre, i codici di escape non vengono considerati.
Es.
[[ciao\nNuova linea\tTabulatore]]
restituisce
ciao\nNuova linea\tTabulatore

Booleani

I valori booleani possono avere solo il valore true (vero) o false (falso). Se un valore non è vero, è obbligatoriamente falso e viceversa.
I valore booleani possono anche essere il risultato di un’espressione relazionale o di un’espressione logica.
L’operatore logico not inverte il valore di un’espressione logica.
Es. not true indica false.

Tabelle

Il Lua ha un tipo di dato chiamato tabella; sono un tipo di dato molto flessibile e utile che contiene altri oggetti/variabili (compresi numeri, stringhe, e altro).
Le tabelle vengono create usando una coppia di parentesi graffe {}, e contengono una lista di dati separati da virgole, ogni elemento della tabella viene identificato numericamente. (N.B l’indirizzamento della tabella inizia da 1).
Possiamo pensare alle tabelle, come se fosse una vera e propria tabella (o griglia); per ottenere il valore di una variabile al suo interno, si usano gli indici, che vengono racchiusi tra parentesi quadre [ ] prima del nome della tabella stessa.
Es.
t = { 1,1,2,3,5,8,13 } ? costruisce una tabella e l’assegna alla variabile "t”.
t[4] corrisponde al numero 3; t[6] corrisponde al numero 8, t[0] ha valore nil (cioè nullo, perché non esiste nessun elemento alla posizione 0, perché l’indirizzamento della tabella inizia da 1).
Es.
animOmb = { n=8, "i", "j", "c", "d", "e", "f", "g", "h"}
animOmb[1] corrisponde a: i.
Possiamo costruire tabelle che contengono altre variabili, a cui sono stati assegnati altri valori (come numeri o stringhe).
Es.
x = { valore = 123, testo = "ciao" }
In questo caso possiamo accedere al dato in modo nominale (se il dato è stato assegnato ad una variabile).
Il contenuto verrà richiamato nel seguente modo: x.valore o x.testo.
Da notare che non siamo limitati a memorizzare un tipo di dato in una tabella, ma possiamo inserire numeri, stringhe, funzioni oppure altre tabelle.
Es.
y = { cost={ nome="Pi", valore=3.1415927 }, cost2={ nome="velocità della luce", valore=3e8 } }
il contenuto verrà richiamato nel seguente modo: y.cost.nome o y.cost2.valore.
Es.
t = { 1, { "mela", "pera", "banana" },2,”tre”,5,”otto”,13 }
t[4] = "tre"
t[6] = "otto"
t[2] = { "mela", "pera", "banana" }
Es.
DGhead= { n=3,
{n=8, "{\\c&H77A4D1&}z", "{\\c&HC2C7E1&}x","{\\c&HA0B0D2&}c","{\\c&H9AB49D&}v","{\\c&HBBCCBE&}b","{\\c&HC8CCDB&}m","{\\c&HA87881&}n","l"},
{n=6, "{\\c&HC8CCDB&}s", "{\\c&H889DD0&}d", "{\\c&H613D98&}a", "{\\c&H976AB1&}f", "{\\c&HB192CB&}g", "h"},
{n=7, "{\\c&H66A4CC&}q", "{\\c&HC6C4ED&}y", "{\\c&HACB1D2&}w", "{\\c&H6E658D&}e", "{\\c&H8178A3&}r", "{\\c&HA2B2D5&}t", "u"}
}

nil

nil è un valore speciale che indica che non c’è nessun valore. Se una variabile ha il valore nil, significa che non vi è stato assegnato alcun valore, quindi la variabile non esiste.
Assegnando nil ad una variabile si cancella quella variabile.
Si può testare l’esistenza di una variabile controllando se il suo valore è nil.