Nella maggior parte dei programmi il codice non seguirà mai un andamento lineare. Occorrerà ripetere determinate istruzioni, oppure eseguirne altre solamente se si è in presenza di determinate condizioni. Ma come fare? La soluzione è utilizzare le strutture di controllo!

if:

Questa struttura di controllo permette di eseguire la porzione di codice che racchiude soltanto se verranno verificate determinate condizioni. La sintassi di questa struttura di controllo è:

if espressione then
-- inserisco qui il mio codice
end

Affinchè il blocco di codice racchiuso tra "if" ed "end" venga eseguito, "espressione" deve avere un valore diverso da "nil" o "false". Espressione puo essere qualsiasi cosa: una variabile, una chiamata a funzione o, addirittura, una vera e propria espressione aritmetica o logica.

Se volessimo eseguire del codice nel caso in cui l'espressione non risulti vera possiamo aggiungere un blocco "else" prima di "end":

if espressione then
-- questo codice viene eseguito solamente se l'espressione è valida
else
-- questo codice verrà eseguito solamente se l'espressione NON è valida
end

while:

A differenza di "if", questa struttura di controllo valuta un'espressione ed esegue continuamente il codice racchiuso al suo interno finchè risulterà valida:

while espressione do
-- attenzione, verrò eseguito fintanto che "espressione" non risulterà nil o false!
end

Attenzione, se non vorrete che il vostro programma "cada" all'interno di un loop infinito dovrete utilizzare un'espressione il cui valore potrà essere modificato direttamente dall'interno del ciclo while!

i = 0

while i < 20 do
i = i + 1 -- eseguito 20 volte, finchè i non sarà 20 e l'espressione darà come risultato false
end

Un'alternativa all'utilizzo di un'espressione "dinamica", per uscire da un ciclo potenzialmente infinito, è l'uso del comando "break". L'uso di break interromperà immediatamente il ciclo all'interno del quale viene utilizzato:

while true do
break -- termina il ciclo prematuramente (sarebbe stato un ciclo infinito!
end

for:

Il ciclo for si comporta in maniera simile al ciclo while, ma presenta una sintassi leggermente diversa che ne permette usi differenti:

for nome_variabile = valore_iniziale, valore_finale do
-- verrò eseguito, proprio come per while, finchè espressione risulterà vera
end

Ad inizio ciclo verrà inizializzata una variabile "temporanea" ad un valore iniziale. Il corpo del ciclo verrà ripetuto finchè la variabile temporanea non sarà pari al valore finale. Non preoccupatevi di incrementare la variabile temporanea dall'interno del ciclo. Lua lo farà direttamente per voi!

for i = 0, 20 do
-- verrò eseguito la bellezza di 20 volte!
end

Come per il ciclo while, sarà possibile interrompere l'esecuzione di un ciclo for semplicemente utilizzando il comando "break".