Provate ad immaginare di dover utilizzare più volte una sequenza di istruzioni all'interno dello stesso programma. A tal proposito potrebbe bastare un ciclo iterativo (while, for ecc) Ma se dovessi utilizzarle in momenti diversi? Per fortuna Lua, come ogni altro linguaggio che ci rispetti, ci mette a disposizione le funzioni. Una funzione, per il Lua, viene trattata come ogni altra variabile: ha un identificatore, può essere passata come parametro ad altre funzioni ecc La sintassi per creare una funzione è:

function nome_funzione(nome_argomento1, nome_argomento2,)
--Insersci qui il tuo codice
end
Una volta definita, una funzione può essere chiamata utilizzando la sintassi:

nome_funzione(argomento1, argomento2,)
Nel precedente esempio, l'argomento passato per primo potrà essere utilizzato dall'interno della funzione con nome "nome_argomento1", il secondo potrà essere richiamato col secondo nome e così via:

function stampa(argomento)
print(argomento)
end

stampa
("ciao!")
Nell'esempio, al momento della chiamata della funzione, verrà inizializzata una variabile temporanea di nome "argomento" e di valore "ciao!" che esisterà per tutta la durata della funzione. E' possibile (e talvolta utile) creare funzioni che non accettano parametri.

Talvolta è necessario che la funzione "restituisca" un valore. Per questa necessità esiste il comando "return", che termina l'esecuzione della funzione stessa e restituisce al chiamante eventuali parametri:

function somma(a, b)
return a + b
end
Funzioni in grado di restituire valori possono essere utilizzate all'interno di espressioni:

c = somma(2,3)

print(c)--Verrà visualizzato il numero 5!
"return" può essere utilizzato senza parametri per terminare prematuramente una funzione.