Ruby rukuje greškama sa begin/rescue/ (Ruby-ekvivalent try/catch/finally). Bacate iznimke sa i hvatate ih sa , a je za čišćenje. Ruby također dozvoljava rescue na razini metode (bez eksplicitnog ) za čitljiviji kod.
Ruby rukuje greškama sa begin/rescue/ (Ruby-ekvivalent try/catch/finally). Bacate iznimke sa i hvatate ih sa , a je za čišćenje. Ruby također dozvoljava rescue na razini metode (bez eksplicitnog ) za čitljiviji kod.
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 je Ruby-ev try/catch/finally. Hvatajte specifične tipove (rescue ArgumentError), koristite ensure za zajamčeno čišćenje, i else za slučaj bez greške. retry može ponovno pokušati blok.
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
Važno: goli rescue hvata StandardError (ispravan zadanu vrijednost za greške u aplikaciji). Hvatanje Exception (koren) hvata sve, uključujući signale na razini sustava kao Interrupt (Ctrl-C) i SystemExit — što obično ne želite hvatati, jer može spriječiti prekid programa ili ispravan izlaz. Česta Ruby greška.
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
Pravilno rukovanje iznimkama je neophodno za robusne Ruby aplikacije, a razumijevanje Ruby-eva pristupa — uključujući njegove specifične idiome i napomene — je važno.
Struktura begin/rescue/ensure (Ruby-ev try/catch/finally), hvatanje specifičnih tipova iznimki, korištenje ensure za zajamčeno čišćenje, i čist rescue na razini metode (bez eksplicitnog begin) je temeljno svakodnevno znanje.
Osobito važna i karakteristično Ruby točka je razlika između StandardError i Exception: goli rescue (i ispravna zadana vrijednost) hvata StandardError, ali hvatanje Exception (koren hijerarhije) hvata sve — uključujući signale sustava kao Interrupt (Ctrl-C) i SystemExit — što gotovo nikada ne želite, jer može spriječiti prekid programa ili ispravan izlaz, i to je česta, štetna greška.
Razumijevanje da trebate hvatati StandardError (ne Exception) za greške u aplikaciji je važno Ruby-specifično znanje koje sprječava prave greške.
Znanje strukture, prilagođenih klasa iznimki (naslijeđivanja od StandardError), retry, idioma rescue na razini metode, i osobito razlike StandardError-not-Exception je važno za pisanje robusnog, ispravnog Ruby-ja koji rukuje greškama elegantno bez prekida mogućnosti prekida programa.
Budući da neobradene greške i greška Exception-hvatanja uzrokuju prave probleme, savladavanje Ruby-eva rukovanja iznimkama — njegovom strukturom, idiomima, i kritičnom razlikom StandardError vs Exception — je važno, često relevantno znanje za pouzdani Ruby razvoj i česta tema na razgovorima za posao.