Ruby tħandel l-iżbalji b'begin/rescue/ (l-ekwivalent ta' Ruby ta' try/catch/finally). Int exceptions u huma, b' għall-cleanup. Ruby wkoll tippermetti method-level rescue (mingħajr esplicit) għal kodiċi aktar nadif.
Ruby tħandel l-iżbalji b'begin/rescue/ (l-ekwivalent ta' Ruby ta' try/catch/finally). Int exceptions u huma, b' għall-cleanup. Ruby wkoll tippermetti method-level rescue (mingħajr esplicit) għal kodiċi aktar nadif.
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 hu try/catch/finally ta' Ruby. Rescue tipi speċifiċi (rescue ArgumentError), uża ensure għall-cleanup garantit, u else għall-każ mingħajr żball. retry jista' jipprova mill-ġdid il-blokk.
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
Importanti: bare rescue jaqbad StandardError (id-default korretta għall-iżbalji tal-applikazzjoni). Jaqbad Exception (il-għerq) jaqbad kollox, inkluż sinjali ta' livell tas-sistema bħal Interrupt (Ctrl-C) u SystemExit — li ġeneralment ma tridx taqbad, peress li jista' jipprevjeni l-programm milli jitqatta' jew joħroġ sew. Żball komuni ta' 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
Exception handling xieraq hu essenzjali għal applikazzjonijiet robusti ta' Ruby, u l-fehim tal-approċċ ta' Ruby — inklużi l-idiomi speċifiċi tagħha u l-avvertenza — hu importanti.
L-istruttura begin/rescue/ensure (try/catch/finally ta' Ruby), jaqbad tipi ta' exception speċifiċi, user ensure għall-cleanup garantit, u clean method-level rescue (mingħajr begin esplicit) huma għarif fundamentali ta' kuljum.
Punt partikolarment importanti u distinktivamente ta' Ruby hu l-distizzjoni StandardError vs Exception: bare rescue (u d-default korretta) jaqbad StandardError, imma jaqbad Exception (il-għerq tal-hierarchy) jaqbad kollox — inklużi sinjali tas-sistema bħal Interrupt (Ctrl-C) u SystemExit — li kważi qatt ma tridx, peress li jista' jipprevjeni l-programm milli jitqatta' jew joħroġ sew, u hu żball komuni u ħatif.
L-fehim li għandek taqbad StandardError (mhux Exception) għall-iżbalji tal-applikazzjoni hu għarif importanti speċifiku ta' Ruby li jipprevjeni bugs reali.
L-għarif tal-istruttura, klassijiet ta' exception personalizzati (jerħqu minn StandardError), retry, l-idiom method-level rescue, u speċjalment l-avvertenza StandardError-mhux-Exception hu importanti għall-kitba ta' Ruby robust u korrett li tħandel l-iżbalji b'eleganza mingħajr tiksir il-kapaċità tal-programm li jitqatta'.
Billi l-iżbalji li ma jitħanddlux u l-żball ta' rescuing Exception it-tnejn isabbbu problemi reali, is-soċida ta' Ruby exception handling — l-istruttura tagħha, l-idiomi, u d-distizzjoni kritika StandardError vs Exception — hu importanti, għarif ta' spiss-relevanti għall-iżvilupp affidabbli ta' Ruby u suġġett komuni ta' interview.