Lua:
Obsługa błędów

Jak to zrobić:

Lua używa dwóch głównych funkcji do obsługi błędów: pcall oraz xpcall. Oto jak ich używać:

function might_fail()
    if math.random() > 0.5 then
        error("Ups! Coś poszło nie tak.")
    else
        print("Wszystko w porządku!")
    end
end

-- Używając pcall
local success, errorMessage = pcall(might_fail)

if success then
    print("Sukces!")
else
    print("Złapany błąd:", errorMessage)
end

-- Używając xpcall z obsługą błędów
function myErrorHandler(err)
    print("Zarządca błędów mówi:", err)
end

local status = xpcall(might_fail, myErrorHandler)
print("Czy wywołanie było udane?", status)

Przykładowy wynik może być:

Złapany błąd: Ups! Coś poszło nie tak.
Zarządca błędów mówi: Ups! Coś poszło nie tak.
Czy wywołanie było udane? false

Lub jeśli nie nastąpi błąd:

Wszystko w porządku!
Sukces!
Wszystko w porządku!
Czy wywołanie było udane? true

Szczegółowa analiza

Obsługa błędów, czyli “obsługa wyjątków”, nie zawsze była rzeczą oczywistą. Wczesne programy często się zawieszały. Wraz z rozwojem kodowania pojawiła się również potrzeba stabilności. Podejście Luay jest proste w porównaniu z innymi językami. Nie ma bloków try/catch, są tylko pcall i xpcall. Pierwsza zabezpiecza wywołanie funkcji, zwracając status i jakiś błąd. Druga dodaje funkcję obsługi błędów, co jest przydatne do własnej obsługi błędów lub logowania.

Alternatywą w Lua jest użycie assert, które może służyć podobnemu celowi, rzucając błąd, jeśli jego warunek jest fałszywy. Jednak nie jest tak elastyczne jak pcall do skomplikowanych scenariuszy obsługi błędów.

Wewnętrznie, pcall oraz xpcall działają poprzez ustawienie “ochronionego środowiska” dla funkcji do uruchomienia. Jeśli pojawi się błąd, środowisko łapie go i może albo zaraz go obsłużyć, albo przekazać go z powrotem, aby program mógł sobie z nim poradzić.

Zobacz również