Lua:
Gestione degli errori

Come fare:

Lua utilizza due funzioni principali per la gestione degli errori: pcall e xpcall. Ecco come si usano:

function might_fail()
    if math.random() > 0.5 then
        error("Ops! Qualcosa è andato storto.")
    else
        print("Tutto bene!")
    end
end

-- Utilizzando pcall
local successo, messaggioErrore = pcall(might_fail)

if successo then
    print("Successo!")
else
    print("Errore intercettato:", messaggioErrore)
end

-- Utilizzando xpcall con una funzione di gestione degli errori
function myErrorHandler(err)
    print("Gestore degli errori dice:", err)
end

local stato = xpcall(might_fail, myErrorHandler)
print("La chiamata è stata successful?", stato)

Un esempio di output potrebbe essere:

Errore intercettato: Ops! Qualcosa è andato storto.
Gestore degli errori dice: Ops! Qualcosa è andato storto.
La chiamata è stata successful? false

Oppure, se non si verificano errori:

Tutto bene!
Successo!
Tutto bene!
La chiamata è stata successful? true

Approfondimento

La gestione degli errori, o “exception handling”, non è sempre stata una pratica. I programmi precedenti si bloccavano spesso. Con l’evoluzione della programmazione, è aumentata anche la necessità di stabilità. L’approccio di Lua è semplice rispetto ad alcuni linguaggi. Non ci sono blocchi try/catch, solo pcall e xpcall. Il primo protegge una chiamata di funzione, restituendo uno stato e un eventuale errore. Il secondo aggiunge una funzione di gestione degli errori, utile per una pulizia personalizzata o per il logging.

Un’alternativa in Lua è utilizzare assert, che può servire uno scopo simile lanciando un errore se la sua condizione è falsa. Ma non è flessibile come pcall per scenari di gestione degli errori complessi.

Internamente, pcall e xpcall funzionano impostando un “ambiente protetto” per l’esecuzione della funzione. Se si verifica un errore, l’ambiente lo intercetta e può gestirlo immediatamente o passarlo indietro affinché il programma lo gestisca.

Vedi Anche