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 zonderat_exithandlers 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