Ruby:
Fouten afhandelen
Hoe te:
Ruby gebruikt begin
, rescue
, ensure
en end
om fouten te behandelen. Je wikkelt de risicovolle code in begin
en end
. Als er een fout optreedt, komt rescue
in actie.
begin
# Risicovolle code gaat hier.
puts 10 / 0
rescue ZeroDivisionError => e
puts "Oeps! Dat kun je niet doen: #{e.message}"
ensure
puts "Dit wordt altijd uitgevoerd, fout of niet."
end
Voorbeelduitvoer:
Oeps! Dat kun je niet doen: gedeeld door 0
Dit wordt altijd uitgevoerd, fout of niet.
Diepgaand
Historisch gezien heeft de foutafhandeling in programmeertalen aanzienlijk geëvolueerd, waarbij vroege talen vaak ruwe of niet-bestaande mechanismen hadden. Ruby’s uitzonderingsafhandeling is geïnspireerd door talen zoals Python en Smalltalk.
Alternatieven voor begin-rescue
in Ruby omvatten het gebruik van rescue
in methode-definities of het inzetten van throw
en catch
voor niet-standaard stroombeheersing, hoewel ze niet worden gebruikt voor typische foutafhandeling.
Een interessant detail: Ruby’s uitzonderingen zijn objecten (instanties van de Exception
klasse en haar nakomelingen), dus je kunt aangepaste foutklassen definiëren en meer doen dan alleen fouten loggen - je kunt een rijke staat door het programma dragen voor robuustere foutafhandeling.
Zie Ook
- De Ruby documentatie over uitzonderingen en foutafhandeling: ruby-doc.org
- Een gedetailleerde gids over de beste praktijken voor Ruby foutafhandeling: thoughtbot.com