Ποιοι μηχανισμοί υπάρχουν για να διαταράξουν τη λειτουργία ενός μέρους του έργου;
sobes.tech AI
Απάντηση από AI
-
Εξαιρέσεις (Exceptions): Επιτρέπουν να διακόψετε την εκτέλεση του κώδικα όταν προκύψει σφάλμα και να μεταβιβάσετε τον έλεγχο στα μπλοκ
begin/rescue/ensure.begin # Κώδικας που μπορεί να προκαλέσει σφάλμα result = 1 / 0 rescue ZeroDivisionError => e # Διαχείριση συγκεκριμένου σφάλματος puts "Σφάλμα διαίρεσης με το μηδέν: #{e.message}" # Πιθανή καταγραφή ή εναλλακτική εκτέλεση rescue StandardError => e # Διαχείριση άλλων τυπικών σφαλμάτων puts "Ένα άλλο σφάλμα συνέβη: #{e.message}" ensure # Κώδικας που εκτελείται πάντα, ανεξάρτητα από το αν υπάρχει σφάλμα puts "Τέλος μπλοκ" end -
Raise: Ρύθμιση ρητά μιας εξαίρεσης, τόσο για τυπικές όσο και για προσαρμοσμένες κλάσεις σφαλμάτων.
# Κανονική ενεργοποίηση εξαίρεσης raise "Κάτι πήγε στραβά" # Με συγκεκριμένη κλάση σφάλματος raise MyCustomError, "Μη έγκυρη τιμή" -
exit,abort,Kernel#exit!: Μέθοδοι για τερματισμό του προγράμματος. Τοexit!τερματίζει αμέσως χωρίς να καλεί τους χειριστέςat_exit.# Κανονική λήξη προγράμματος exit(0) # 0 σημαίνει επιτυχημένη λήξη # Τερματισμός με σφάλμα abort("Τερματισμός λόγω κρίσιμου σφάλματος") # Αναγκαστικός τερματισμός Kernel.exit!(1) -
Thread#raise: Επιτρέπει την ενεργοποίηση εξαίρεσης σε άλλο νήμα εκτέλεσης.
thread = Thread.new do begin loop { sleep 1 } rescue => e puts "Το νήμα πιάστηκε: #{e.class}" end end sleep 2 thread.raise StandardError, "Διακοπή νήματος" thread.join -
Σφάλματα προγραμματισμού (λογικά, συντακτικά): Ο κακός γραμμένος κώδικας μπορεί να οδηγήσει σε σφάλματα κατά την εκτέλεση.
# Συντακτικό σφάλμα (λείπει το end) def my_method puts "Γειά σου" # Λογικό σφάλμα (ατέρμονη βρόχος) while true puts "Βρόχος" end -
Σήματα λειτουργικού συστήματος (SIGTERM, SIGINT και άλλα): Μπορούν να διακόψουν την εκτέλεση του προγράμματος από έξω.
# Απλό παράδειγμα χειρισμού σήματος SIGINT (Ctrl+C) Signal.trap("INT") { puts "\nΤο SIGINT πιάστηκε. Τερματισμός..."; exit } loop { sleep 1 } -
Επικυρώσεις (ιδιαίτερα κατά την ανάπτυξη και δοκιμές): Μηχανισμοί ελέγχου συνθηκών, που, αν παραβιαστούν, ρίχνουν εξαίρεση ή εκτελούν άλλη ενέργεια. Στη Ruby, συχνά υλοποιούνται με βιβλιοθήκες δοκιμών.
# Παράδειγμα με τη βιβλιοθήκη MiniTest require 'minitest/autorun' class MyTest < Minitest::Test def test_division # Δήλωση: το αποτέλεσμα της διαίρεσης 4 με 2 είναι 2 assert_equal 2, 4 / 2 # Δήλωση: η διαίρεση με το μηδέν πρέπει να προκαλέσει ZeroDivisionError assert_raises(ZeroDivisionError) { 1 / 0 } end end