Sobes.tech
Middle+

Aké mechanizmy existujú na narušenie práce časti projektu?

sobes.tech AI

Odpoveď od AI

  • Výnimky (Exceptions): Umožňujú zastaviť vykonávanie kódu pri vzniku chyby a preniesť riadenie na bloky begin/rescue/ensure.

    begin
      # Kód, ktorý môže spôsobiť chybu
      result = 1 / 0
    rescue ZeroDivisionError => e
      # Spracovanie špecifickej chyby
      puts "Chyba delenia nulou: #{e.message}"
      # Možné logovanie alebo alternatívne vykonanie
    rescue StandardError => e
      # Spracovanie iných štandardných chýb
      puts "Nastala iná chyba: #{e.message}"
    ensure
      # Kód, ktorý sa vykoná vždy, bez ohľadu na prítomnosť chyby
      puts "Ukončenie bloku"
    end
    
  • Raise: Jasné vyvolanie výnimky, ako pre štandardné, tak aj pre používateľské triedy chýb.

    # Obvyklé vyvolanie výnimky
    raise "Niečo sa pokazilo"
    
    # Vyvolanie s konkrétnym triedou chyby
    raise MyCustomError, "Neplatná hodnota"
    
  • exit, abort, Kernel#exit!: Metódy na ukončenie vykonávania programu. exit! ukončí program okamžite, bez volania handlerov at_exit.

    # Obvyklé ukončenie programu
    exit(0) # 0 - úspešné ukončenie
    
    # Ukončenie s chybou
    abort("Ukončenie kvôli kritickej chybe")
    
    # Vynútené ukončenie
    Kernel.exit!(1)
    
  • Thread#raise: Umožňuje vyvolať výnimku v inom vlákne.

    thread = Thread.new do
      begin
        loop { sleep 1 }
      rescue => e
        puts "Vlakno zachytené: #{e.class}"
      end
    end
    
    sleep 2
    thread.raise StandardError, "Zastavenie vlákna"
    thread.join
    
  • Programové chyby (logické, syntaktické): Nesprávne napísaný kód môže viesť k zlyhaniu vykonávania.

    # Syntaktická chyba (chýba end)
    def my_method
      puts "Ahoj"
    
    # Logická chyba (nekonečná slučka)
    while true
      puts "Slučka"
    end
    
  • Signály operačného systému (SIGTERM, SIGINT a pod.): Môžu prerušiť vykonávanie programu zvonku.

    # Jednoduchý príklad spracovania signálu SIGINT (Ctrl+C)
    Signal.trap("INT") { puts "\nZachytený SIGINT. Ukončujem..."; exit }
    
    loop { sleep 1 }
    
  • Assertions (najmä pri vývoji a testovaní): Mechanizmy kontroly podmienok, pri ktorých sa vyvolá výnimka alebo vykoná iná akcia. V Ruby sa často realizujú pomocou knižníc na testovanie.

    # Príklad s použitím knižnice MiniTest
    require 'minitest/autorun'
    
    class MyTest < Minitest::Test
      def test_delenie
        # Tvrdenie: výsledok delenia 4 na 2 je 2
        assert_equal 2, 4 / 2
        # Tvrdenie: delenie nulou by malo vyvolať výnimku ZeroDivisionError
        assert_raises(ZeroDivisionError) { 1 / 0 }
      end
    end