Ce mecanisme există pentru a perturba funcționarea unei părți a proiectului?
sobes.tech AI
Răspuns de la AI
-
Excepții (Exceptions): Permite oprirea execuției codului în cazul unei erori și transferul controlului către blocurile
begin/rescue/ensure.begin # Cod care poate provoca o eroare result = 1 / 0 rescue ZeroDivisionError => e # Tratarea unei erori specifice puts "Eroare de împărțire la zero: #{e.message}" # Posibilă înregistrare sau execuție alternativă rescue StandardError => e # Tratarea altor erori standard puts "A apărut o altă eroare: #{e.message}" ensure # Cod care se execută întotdeauna, indiferent dacă există eroare sau nu puts "Sfârșitul blocului" end -
Raise: Declanșarea explicită a unei excepții, atât pentru clasele de erori standard, cât și pentru cele personalizate.
# Declanșare normală a unei excepții raise "Ceva nu a mers bine" # Declanșare cu o clasă de eroare specifică raise MyCustomError, "Valoare invalidă" -
exit,abort,Kernel#exit!: Metode pentru terminarea execuției programului.exit!termină programul imediat, fără a apela handleriiat_exit.# Încheiere normală a programului exit(0) # 0 indică o încheiere cu succes # Încheiere cu eroare abort("Încheiere din cauza unei erori critice") # Încheiere forțată Kernel.exit!(1) -
Thread#raise: Permite declanșarea unei excepții într-un alt fir de execuție.
thread = Thread.new do begin loop { sleep 1 } rescue => e puts "Fir interceptat: #{e.class}" end end sleep 2 thread.raise StandardError, "Oprirea firului" thread.join -
Erori de programare (logice, sintactice): Codul scris greșit poate duce la eșecuri în timpul execuției.
# Eroare sintactică (lipsă end) def my_method puts "Salut" # Eroare logică (buclă infinită) while true puts "Buclă" end -
Semnale ale sistemului de operare (SIGTERM, SIGINT și altele): Pot întrerupe execuția programului din exterior.
# Exemplu simplu de tratare a semnalului SIGINT (Ctrl+C) Signal.trap("INT") { puts "\nSemnal SIGINT capturat. Încheiere..."; exit } loop { sleep 1 } -
Aserțiuni (mai ales în timpul dezvoltării și testării): Mecanisme de verificare a condițiilor, care, dacă sunt încălcate, aruncă o excepție sau efectuează o altă acțiune. În Ruby, deseori implementate cu biblioteci de testare.
# Exemplu cu biblioteca MiniTest require 'minitest/autorun' class MyTest < Minitest::Test def test_diviziune # Afirmare: rezultatul împărțirii lui 4 la 2 este 2 assert_equal 2, 4 / 2 # Afirmare: împărțirea la zero trebuie să arunce ZeroDivisionError assert_raises(ZeroDivisionError) { 1 / 0 } end end