Milyen mechanizmusok léteznek egy projekt egy részének működésének megzavarására?
sobes.tech MI
Válasz az MI-től
-
Kivételek (Exceptions): Lehetővé teszik a kód végrehajtásának megszakítását hiba esetén, és az irányítás átadását a
begin/rescue/ensureblokkoknak.begin # Kód, amely hiba okozhat result = 1 / 0 rescue ZeroDivisionError => e # Specifikus hiba kezelése puts "Nullával való osztás hiba: #{e.message}" # Lehetséges naplózás vagy alternatív végrehajtás rescue StandardError => e # Egyéb standard hibák kezelése puts "Egy másik hiba történt: #{e.message}" ensure # Kód, amely mindig végrehajtódik, függetlenül a hibától puts "A blokk vége" end -
Raise: Egyértelmű kivétel kiváltása, mind standard, mind egyedi hibacsoportok esetén.
# Normál kiváltás raise "Valami rosszul ment" # Kiváltás konkrét hibacsoporttal raise MyCustomError, "Érték érvénytelen" -
exit,abort,Kernel#exit!: A program végrehajtásának befejezése. Azexit!azonnal befejezi a programot, anélkül, hogy meghívná azat_exitkezelőket.# Normál program befejezése exit(0) # 0 sikeres befejezést jelent # Hibával való befejezés abort("Kritikus hiba miatt történő befejezés") # Kényszerített befejezés Kernel.exit!(1) -
Thread#raise: Lehetővé teszi, hogy kivételt dobjon egy másik szálban.
thread = Thread.new do begin loop { sleep 1 } rescue => e puts "Szál elfogva: #{e.class}" end end sleep 2 thread.raise StandardError, "Szál leállítása" thread.join -
Programozási hibák (logikai, szintaktikai): A rosszul írt kód futás közben hibákhoz vezethet.
# Szintaktikai hiba (hiányzik az end) def my_method puts "Helló" # Logikai hiba (végtelen ciklus) while true puts "Ciklus" end -
Operációs rendszer jelek (SIGTERM, SIGINT stb.): Kívülről megszakíthatják a program futását.
# Egyszerű példa SIGINT (Ctrl+C) jel kezelésére Signal.trap("INT") { puts "\nSIGINT elfogva. Befejezés..."; exit } loop { sleep 1 } -
Állítások (különösen fejlesztés és tesztelés során): Feltételek ellenőrzésére szolgáló mechanizmusok, amelyek megsértése esetén kivételt vagy más műveletet hajtanak végre. Rubyban gyakran tesztkönyvtárakkal valósulnak meg.
# MiniTest könyvtár példája require 'minitest/autorun' class MyTest < Minitest::Test def test_osztás # Állítás: 4 osztva 2-vel eredménye 2 assert_equal 2, 4 / 2 # Állítás: nullával való osztás ZeroDivisionError-t kell, hogy kiváltsa assert_raises(ZeroDivisionError) { 1 / 0 } end end