Ruby verwerkt fouten met begin/rescue/ (Ruby's equivalent van try/catch/finally). Je uitzonderingen en ze, met voor opschoning. Ruby staat ook method-level rescue toe (zonder expliciete ) voor schonere code.
Ruby verwerkt fouten met begin/rescue/ (Ruby's equivalent van try/catch/finally). Je uitzonderingen en ze, met voor opschoning. Ruby staat ook method-level rescue toe (zonder expliciete ) voor schonere code.
ensureraiserescueensurebeginbegin
result = risky_operation
rescue ArgumentError => e # rescue a SPECIFIC exception type
puts "Bad argument: #{e.message}"
rescue StandardError => e # broader catch (StandardError, not Exception)
puts "Error: #{e.message}"
retry if attempts < 3 # retry can re-run the begin block
else
puts "succeeded" # runs if NO exception
ensure
cleanup # ALWAYS runs (success or failure)
end
begin/rescue/ensure is Ruby's try/catch/finally. Rescue specifieke typen (rescue ArgumentError), gebruik ensure voor gegarandeerde opschoning, en else voor het geval zonder fouten. retry kan het blok opnieuw proberen.
rescue => e # ✅ bare rescue catches StandardError (the right default)
rescue StandardError # ✅ explicit, same thing
rescue Exception # ❌ AVOID — catches EVERYTHING including system signals
# (Interrupt/Ctrl-C, SystemExit) — can break the program
Belangrijk: een bare rescue vangt StandardError (de correcte standaard voor applicatiefouten). Het rescuen van Exception (de root) vangt alles, inclusief systeemseinen zoals Interrupt (Ctrl-C) en SystemExit — die je meestal niet wilt vangen, omdat dit kan voorkomen dat het programma wordt onderbroken of correct afsluit. Een veel voorkomende Ruby-fout.
raise ArgumentError, "Amount must be positive" # raise a built-in
raise "Something failed" # raises RuntimeError
# custom exception class
class InsufficientFundsError < StandardError # inherit from StandardError
def initialize(msg = "Not enough funds")
super
end
end
raise InsufficientFundsError
def process
do_work
rescue => e # rescue WITHOUT begin — applies to the whole method body
handle(e)
ensure
cleanup
end
Juiste exception handling is essentieel voor robuuste Ruby-toepassingen, en het begrijpen van Ruby's aanpak — inclusief de specifieke idiomatische uitdrukkingen en voorbehouden — is belangrijk.
De begin/rescue/ensure structuur (Ruby's try/catch/finally), het rescuen van specifieke exception types, het gebruik van ensure voor gegarandeerde opschoning, en de schone method-level rescue (zonder expliciete begin) zijn fundamentele dagelijkse kennis.
Een bijzonder belangrijk en karakteristiek Ruby-punt is het StandardError versus Exception onderscheid: een bare rescue (en de correcte standaard) vangt StandardError, maar het rescuen van Exception (de root van de hiërarchie) vangt alles — inclusief systeemseinen zoals Interrupt (Ctrl-C) en SystemExit — wat je bijna nooit wilt, omdat dit kan voorkomen dat het programma wordt onderbroken of correct afsluit, en is een veel voorkomende, schadelijke fout.
Begrijpen dat je StandardError (niet Exception) moet rescuen voor applicatiefouten is belangrijke Ruby-specifieke kennis die echte bugs voorkomt.
De structuur kennen, aangepaste exception classes (erfend van StandardError), retry, de method-level rescue idiomatische uitdrukking, en vooral het StandardError-niet-Exception voorbehoud is belangrijk voor het schrijven van robuuste, correcte Ruby die fouten elegant verwerkt zonder het vermogen van het programma om te worden onderbroken in het geding te brengen.
Omdat onverwerkte fouten en de Exception-rescuing fout beide echte problemen veroorzaken, is het beheersen van Ruby's exception handling — de structuur, idiomatische uitdrukkingen, en het kritieke StandardError versus Exception onderscheid — belangrijk, regelmatig relevante kennis voor betrouwbare Ruby-ontwikkeling en een veel voorkomend interviewonderwerp.