Sobes.tech
Middle+

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/ensure blokkoknak.

    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. Az exit! azonnal befejezi a programot, anélkül, hogy meghívná az at_exit kezelő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