Sommario
Lua È un linguaggio dinamico quando si tratta di tipi di dati e dei loro valori, cioè non ci sono definizioni di alcun tipo quando si crea una variabile e si specifica che si tratta di una stringa, un numero o anche un booleano.Le espressioni vanno di pari passo con i valori, questi ci permettono di eseguire con essi operazioni, che possono spaziare da operazioni aritmetiche, relazionali e anche condizionali per dare dinamismo ai nostri programmi, ma prima di passare alle espressioni vediamo i tipi di valori che possediamo in Lua e come funzionano all'interno del linguaggio.
Nel Lua Ogni valore carica il proprio tipo, in cui possiamo trovare otto diversi tipi di questi: zero, booleano, numero, stringa, dati utente, funzione, thread e tabella, dove con la funzione genere () possiamo conoscere il nome del tipo del valore dato. Vediamo un semplice esempio di come Lua interpreta questo secondo genere ():
NilQuesto è un tipo di valore la cui proprietà principale deve essere diversa dagli altri valori. Come abbiamo visto nell'ultimo tutorial, una variabile globale ha il valore di default zero e se vogliamo eliminarlo, assegniamo questo valore, possiamo anche usarlo per rappresentare l'assenza di un valore utile.
booleanoI valori booleani, come nel resto dei linguaggi di programmazione, hanno due valori, vero e falso, ma a differenza di altri linguaggi, questo tipo di dati non ha un dominio totale sulle condizioni poiché qualsiasi può rappresentare una condizione.
NumeroQuesto tipo di dati rappresenta sia numeri interi che decimali. Lua non ha un tipo di valore intero e non ne ha bisogno, poiché Lua può rappresentare qualsiasi intero a 32 bit senza problemi di arrotondamento, ma la cosa più interessante del linguaggio è che possiamo compilarlo per utilizzare un altro tipo, come interi lunghi o float, che è abbastanza utile nei casi in cui l'hardware non ha supporto per i decimali.
CordaLe stringhe in Lua Sono una sequenza di caratteri, sono valori che sono immutabili, cioè non possiamo cambiare un carattere all'interno della stringa. Sono gestiti dalla memoria automatica del linguaggio come il resto degli oggetti e l'assegnazione della stringa può essere con doppi apici o singoli.
TavoloIl tipo di dati table implementa un array associativo, che è un array che può essere indicizzato non solo con numeri ma con stringhe o qualsiasi altro valore del linguaggio, tranne nil. Le tabelle non hanno una dimensione fissa, quindi possiamo includere tutti gli elementi che vogliamo e con loro possiamo rappresentare moduli, pacchetti e oggetti allo stesso modo. Infine, la sua creazione è semplice come usare le parentesi {} all'inizializzazione della tabella.
CaratteristicheLe funzioni in Lua hanno un comportamento abbastanza particolare, possiamo salvarli in variabili, passarli come argomenti ad altre funzioni e restituirli anche come risultati, dove Lua puoi chiamare queste funzioni scritte sia nel linguaggio stesso che in C.
Dati utenteIl tipo di dati dati utente permette di memorizzare in variabili di Lua informazioni arbitrarie da C. Non ha operazioni predefinite su Lua, ad eccezione dei test di assegnazione e uguaglianza, dove la funzione principale di questo tipo è quella di rappresentare nuovi tipi in quanto tali creati da un'applicazione o da una libreria scritta in C.
Come si vede le tipologie non differiscono molto da quello che possiamo trovare nei linguaggi attuali, ma quello che è certo è che la semplicità che abbiamo per rappresentarle è molto maggiore, allora vediamo il ruolo delle espressioni e come possiamo usarle con i nostri valori.
Le operazioni aritmetiche sono estremamente importanti per qualsiasi programma ed è importante sapere come gestirle e quali restrizioni possono esistere nel linguaggio che stiamo utilizzando. Lua supporta gli operatori convenzionali a cui siamo abituati: addizione, sottrazione, moltiplicazione, divisione, esponenziale, percentuale e negazione.
Vediamo allora un semplice codice dove dimostriamo l'uso di alcuni operatori di Lua:
x = 8 + 5 y = 9 - 2 stampa (x * y% 0,01)Usiamo addizione, sottrazione e divisione per 2 sul risultato di un'operazione di moltiplicazione, vediamo come risponde l'interprete quando eseguiamo il nostro codice attraverso la console:
INGRANDIRE
Lua come altri linguaggi ci fornisce operatori relazionali come maggiore di>, minore di <, minore o uguale =, uguale-uguale == e negazione ~ =. Vediamo che l'unico che forse differisce è la smentita ma dopo che ci abituiamo non ci saranno problemi con il suo utilizzo.
Tutti questi operatori possono restituire vero o falso, dove possiamo anche applicare sia l'operatore di uguaglianza che l'operatore di negazione a due valori. Questi confronti Lua li fa in base al tipo oltre ad altri fattori, vediamo nel codice seguente dove il confronto viene effettuato in base allo stesso oggetto:
un = {}; ax = 1; a.y = 0 b = {}; b.x = 1; b.y = 0 c = aDove se confrontiamo lo stesso, il risultato dell'operazione ci dà che a è uguale a c ma che a è diverso da b, questo è dovuto al fatto che sono lo stesso oggetto. Inoltre, dobbiamo stare molto attenti quando si confrontano diversi tipi, poiché ad esempio 6 è diverso da "6" e se facciamo qualcosa come "3" <"8" Lua darà un errore poiché stiamo mescolando le stringhe.
Gli operatori logici in Lua sono l'e, o l'e non. Quando si effettua un confronto utilizzando questi operatori, verrà restituito il primo argomento se è falso, altrimenti verrà restituito il secondo.Vediamo una serie di esempi nella console interattiva per dimostrare quanto sopra.
INGRANDIRE
INGRANDIRE
Infine, abbiamo i costruttori, che sono espressioni che ci permettono di creare e inizializzare tabelle, questa caratteristica è unica per Lua ed è uno dei suoi meccanismi più versatili e potenti. Possiamo usare un costruttore vuoto senza problemi con solo le parentesi {} che creerà una tabella vuota come tale. Questi possono anche inizializzare array o liste, vediamo un esempio:
giorni = {"domenica", "lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato"}Qui creiamo un elenco con i giorni della settimana e se vogliamo accedere ai suoi elementi specificando l'indice degli stessi che abbiamo, ad esempio per ottenere giovedì sarebbe il numero di indice 5 o domenica sarebbe il numero 1, da Lua Non si inizializza a zero come il resto delle lingue, vediamo come appare quando lo eseguiamo nella nostra console:
matrice = {x = 26, y = 67}
Ma è importante che per accedere ai suoi valori facciamo il riferimento all'indice con doppie virgolette, otterremo il valore zero, vediamo il nostro funzionamento nella console interattiva: