Panoramica dei tipi di dati Lua
Esplori i tipi nil, boolean, number, string, table, function e userdata.
Panoramica dei tipi di dati Lua è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Benvenuti in Lua
Lua è un linguaggio di scripting leggero, veloce e incorporabile, utilizzato nei motori di gioco, nei server web e nei sistemi embedded. Prima di scrivere programmi veri e propri, è necessario capire come Lua rappresenta i dati.
Lua ha 8 tipi di base: nil, boolean, number, string, table, function, userdata e thread. Ogni valore in Lua appartiene esattamente a uno di questi tipi.
-- Check the type of any value with type()
print(type(42)) -- number
print(type("hello")) -- string
print(type(true)) -- boolean
print(type(nil)) -- nilnil: l’assenza di un valore
nil è il modo in cui Lua rappresenta il nulla o l’assenza di un valore. È l’unico valore del proprio tipo. Le variabili a cui non è mai stato assegnato un valore contengono automaticamente nil.
Assegnare nil a una variabile globale equivale di fatto a eliminarla. Nelle tabelle, impostare una chiave su nil rimuove completamente quella voce.
-- Unassigned variables are nil
print(x) -- nil
x = 10
print(x) -- 10
x = nil
print(x) -- nil (variable is gone)boolean: vero e falso
Il tipo boolean ha esattamente due valori: true e false. Le regole di veridicità di Lua sono semplici ma importanti: solo nil e false sono falsy. Tutto il resto — compresi il numero 0 e la stringa vuota "" — è truthy.
Questo comportamento differisce da quello di molti linguaggi, in cui 0 o "" sono considerati falsi.
-- Lua truthiness examples
if 0 then print("0 is truthy!") end -- prints!
if "" then print("empty str is truthy!") end -- prints!
if nil then print("nil") else print("nil is falsy") end
if false then print("false") else print("false is falsy") endnumber: interi e numeri in virgola mobile
Lua 5.3+ ha due sottotipi di number: integer e float. Gli interi sono valori esatti a 64 bit; i numeri in virgola mobile usano la doppia precisione IEEE 754. In Lua 5.1/5.2, tutti i numeri sono double.
La funzione math.type() distingue i due sottotipi. La divisione con / restituisce sempre un float; // (divisione intera con arrotondamento per difetto) restituisce un intero quando entrambi gli operandi sono interi.
print(type(10)) -- number
print(type(10.5)) -- number
print(math.type(10)) -- integer
print(math.type(10.5))-- float
print(10 / 3) -- 3.3333...
print(10 // 3) -- 3 (floor division)string: testo in Lua
Le stringhe in Lua sono sequenze immutabili di byte. È possibile delimitarle con apici singoli, virgolette doppie oppure con le parentesi quadre estese [[...]] per le stringhe su più righe. Le stringhe racchiuse tra parentesi quadre estese ignorano il primo carattere di nuova riga e conservano letteralmente tutto il resto.
Le stringhe Lua sono internate, quindi le stringhe identiche condividono la memoria. L’operatore di lunghezza # restituisce il numero di byte.
local s1 = 'single quotes'
local s2 = "double quotes"
local s3 = [[multi-line
long string]]
print(#s1) -- 13
print(type(s1)) -- string
print(s1 .. " works") -- concatenation with ..table: il contenitore universale
Il tipo table è l’unica struttura dati composta di Lua, ma è abbastanza potente da implementare array, dizionari, oggetti, insiemi e molto altro. Le tabelle sono array associativi: associano chiavi a valori, dove le chiavi possono essere qualsiasi valore diverso da nil e da NaN.
Le tabelle vengono create con le parentesi graffe {}. Le tabelle in stile array usano chiavi intere a partire da 1.
-- Array style
local fruits = {"apple", "banana", "cherry"}
print(fruits[1]) -- apple (1-indexed!)
-- Dictionary style
local person = {name = "Alice", age = 30}
print(person.name) -- Alice
print(person["age"]) -- 30function: valori di prima classe
In Lua, le funzioni sono valori di prima classe del tipo function. Possono essere memorizzate in variabili, passate come argomenti e restituite da altre funzioni. Questo rende Lua particolarmente adatto ai paradigmi della programmazione funzionale.
È possibile definire funzioni usando la parola chiave function oppure assegnare funzioni anonime a variabili. Le due forme sono equivalenti.
-- Two equivalent ways to define a function
function greet(name)
return "Hello, " .. name
end
local greet2 = function(name)
return "Hello, " .. name
end
print(type(greet)) -- function
print(greet("Lua")) -- Hello, Luauserdata e thread
userdata rappresenta dati C arbitrari gestiti dall’applicazione host. Non è possibile creare userdata in Lua puro: proviene da estensioni C o da ambienti di embedding, come i motori di gioco. Consente al codice C di esporre oggetti agli script Lua.
thread rappresenta le coroutine, cioè flussi di esecuzione indipendenti con i propri stack. Le coroutine saranno approfondite in una lezione dedicata. Per ora, è sufficiente sapere che coroutine.create() restituisce un valore di tipo thread.
-- thread type via coroutine
local co = coroutine.create(function()
print("coroutine body")
end)
print(type(co)) -- thread
-- userdata comes from C, not creatable in pure Lua
-- type(io.stdin) == "file" is a userdata variantUsare type() per esaminare i valori
La funzione integrata type() restituisce sempre una stringa che indica il tipo del proprio argomento. È utile per la programmazione difensiva e il debugging. È possibile confrontare direttamente il risultato con le stringhe che rappresentano i nomi dei tipi.
Si noti che type(nil) restituisce la stringa "nil", non il valore nil stesso. Questo consente di verificare in sicurezza se una variabile contiene nil senza generare errori.
local values = {42, "hi", true, nil, {}, function() end}
-- Note: nil in table stops ipairs early
for i = 1, 3 do
print(i, type(values[i]))
end
-- 1 number
-- 2 string
-- 3 booleanDifferenze tra i tipi rispetto ad altri linguaggi
Se si proviene da JavaScript, Python o Java, alcune regole sui tipi di Lua potrebbero sorprendere. Non esiste un tipo intero separato visibile a type(): sia gli interi sia i numeri in virgola mobile restituiscono "number". Gli array non hanno un tipo specifico: sono semplicemente tabelle. Le classi non esistono: gli oggetti sono tabelle con metatabelle.
Comprendere queste differenze aiuta a evitare errori comuni quando si passa da un linguaggio all’altro.
-- No separate array type
local arr = {1, 2, 3}
print(type(arr)) -- table (not array!)
-- No separate integer type visible
print(type(1)) -- number
print(type(1.0)) -- number
-- math.type distinguishes
print(math.type(1)) -- integer
print(math.type(1.0)) -- floatVerifica rapida
Che cosa restituisce type(0) in Lua?
Riepilogo: panoramica dei tipi di dati di Lua
Sono stati analizzati tutti gli 8 tipi di Lua:
- nil — assenza di un valore; falsy
- boolean — vero/falso; solo nil e false sono falsy
- number — intero o float; usare math.type() per distinguerli
- string — sequenze immutabili di byte; usare .. per concatenare
- table — il contenitore universale per array e dizionari
- function — valori di prima classe memorizzabili nelle variabili
- userdata — dati C esposti a Lua
- thread — riferimenti a coroutine
Successivamente: dichiarazione delle variabili — ambito globale e locale.
Domande Frequenti
La lezione «Panoramica dei tipi di dati Lua» è gratuita?
Sì — il testo completo di «Panoramica dei tipi di dati Lua» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «Panoramica dei tipi di dati Lua»?
Esplori i tipi nil, boolean, number, string, table, function e userdata. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Panoramica dei tipi di dati Lua»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Panoramica dei tipi di dati Lua
- Dichiarare variabili in Lua
- Operatori aritmetici e relazionali
- Coercizione e conversione dei tipi