Ruby trajon gabimet me begin/rescue/ (ekuivalenti i Ruby-t për try/catch/finally). Ju përjashtime dhe ato, me për pastrimin. Ruby gjithashtu lejon rescue në nivel metode (pa eksplicit ) për kod më të pastër.
Ruby trajon gabimet me begin/rescue/ (ekuivalenti i Ruby-t për try/catch/finally). Ju përjashtime dhe ato, me për pastrimin. Ruby gjithashtu lejon rescue në nivel metode (pa eksplicit ) për kod më të pastër.
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 është try/catch/finally i Ruby-t. Rescue lloje specifike (rescue ArgumentError), përdorni ensure për pastrimin e garantuar, dhe else për rastin pa gabim. retry mund të riprovojë bllokun.
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
E rëndësishme: një rescue i thjeshtë kap StandardError (parazgjedhja e saktë për gabimet e aplikacionit). Rescuing Exception (rrënja) kap gjithçka, përfshirë sinjalet në nivel sistemi si Interrupt (Ctrl-C) dhe SystemExit — të cilat zakonisht nuk doni t'i kapni, pasi mund të parandalojë programin të ndërpritet ose të dalë si duhet. Një gabim i zakonshëm në Ruby.
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
Trajtimi i duhur i përjashtimeve është thelbësor për aplikacione të forta Ruby, dhe kuptimi i qasjes së Ruby-t — përfshirë idiomatë të veçanta dhe kufizime — është i rëndësishëm.
Struktura begin/rescue/ensure (try/catch/finally i Ruby-t), rescuing lloje specifike përjashtimesh, përdorimi i ensure për pastrimin e garantuar, dhe rescue i pastër në nivel metode (pa eksplicit begin) janë njohuritë themelore të përditshme.
Një pikë veçanërisht e rëndësishme dhe karakteristike e Ruby-t është dallimi midis StandardError dhe Exception: një rescue i thjeshtë (dhe parazgjedhja e saktë) kap StandardError, por rescuing Exception (rrënja e hierarkisë) kap gjithçka — përfshirë sinjale sistemi si Interrupt (Ctrl-C) dhe SystemExit — të cilat pothuajse asnjëherë nuk doni, pasi mund të parandalojë programin të ndërpritet ose të dalë si duhet, dhe është një gabim i zakonshëm dhe dëmtues.
Kuptimi që duhet të rescue StandardError (jo Exception) për gabimet e aplikacionit është njohuri e rëndësishme specifike për Ruby-n që parandalon gabime reale.
Dije e strukturës, klasave të përjashtimeve vetjake (trashëgim nga StandardError), retry, idiomatë rescue në nivel metode, dhe veçanërisht kufizimi StandardError-jo-Exception është i rëndësishëm për të shkruar Ruby-t të fortë dhe të saktë që të trajtojë gabimet me hijeshi pa thyer aftësinë e programit të ndërpritet.
Meqenëse gabimet e patrajtuar dhe gabimi i Exception-rescuing shkaktojnë probleme reale, zotërimi i trajtimit të përjashtimeve në Ruby — struktura e tij, idiomatë, dhe dallimi kritik StandardError versus Exception — është njohuri e rëndësishme, shpesh relevante për zhvillimin e besueshëm të Ruby-t dhe një temë e zakonshme në intervista.