Sobes.tech
Middle+

Welke mechanismen bestaan er om het functioneren van een deel van het project te verstoren?

sobes.tech AI

Antwoord van AI

  • Exceptions (Uitzonderingen): Stellen je in staat om de uitvoering van de code te stoppen bij een fout en de controle over te dragen aan de blokken begin/rescue/ensure.

    begin
      # Code die een fout kan veroorzaken
      result = 1 / 0
    rescue ZeroDivisionError => e
      # Afhandeling van een specifieke fout
      puts "Fout bij deling door nul: #{e.message}"
      # Mogelijke logging of alternatieve uitvoering
    rescue StandardError => e
      # Afhandeling van andere standaardfouten
      puts "Er is een andere fout opgetreden: #{e.message}"
    ensure
      # Code die altijd wordt uitgevoerd, ongeacht of er een fout is
      puts "Einde van het blok"
    end
    
  • Raise: Expliciet een uitzondering opwekken, zowel voor standaard- als voor aangepaste foutklassen.

    # Normaal een uitzondering opwekken
    raise "Er is iets mis gegaan"
    
    # Met een specifieke foutklasse
    raise MyCustomError, "Ongeldige waarde"
    
  • exit, abort, Kernel#exit!: Methoden om het programma te beëindigen. exit! beëindigt onmiddellijk zonder at_exit handlers aan te roepen.

    # Normaal programma beëindigen
    exit(0) # 0 betekent succesvolle afsluiting
    
    # Met fout afsluiten
    abort("Beëindiging vanwege kritieke fout")
    
    # Forceren afsluiten
    Kernel.exit!(1)
    
  • Thread#raise: Staat toe om een uitzondering te veroorzaken in een andere thread.

    thread = Thread.new do
      begin
        loop { sleep 1 }
      rescue => e
        puts "Thread opgevangen: #{e.class}"
      end
    end
    
    sleep 2
    thread.raise StandardError, "Stop de thread"
    thread.join
    
  • Programmeervan fouten (logisch, syntactisch): Slecht geschreven code kan leiden tot fouten tijdens uitvoering.

    # Syntactische fout (missing end)
    def my_method
      puts "Hallo"
    
    # Logische fout (oneindige lus)
    while true
      puts "Lus"
    end
    
  • Systeemsignalen (SIGTERM, SIGINT, enz.): Kunnen de uitvoering van het programma van buitenaf onderbreken.

    # Eenvoudig voorbeeld van het afhandelen van SIGINT (Ctrl+C)
    Signal.trap("INT") { puts "\nSIGINT ontvangen. Beëindigen..."; exit }
    
    loop { sleep 1 }
    
  • Aannames (vooral bij ontwikkeling en testen): Mechanismen om condities te controleren, die bij overtreding een uitzondering of andere actie uitvoeren. In Ruby vaak geïmplementeerd met testbibliotheken.

    # Voorbeeld met MiniTest bibliotheek
    require 'minitest/autorun'
    
    class MyTest < Minitest::Test
      def test_deling
        # Aannames: resultaat van 4 gedeeld door 2 is 2
        assert_equal 2, 4 / 2
        # Aannames: delen door nul moet ZeroDivisionError veroorzaken
        assert_raises(ZeroDivisionError) { 1 / 0 }
      end
    end