Koji mehanizmi postoje za narušavanje rada dela projekta?
sobes.tech АИ
Одговор од АИ
-
Изузеци (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 } -
Assertions (посебно при развоју и тестирању): Механизми провере услова, при чијем кршењу се избацује изузетак или извршава друга акција. У Ruby-ју се често реализују помоћу библиотека за тестирање.
# Пример са коришћењем библиотеке MiniTest require 'minitest/autorun' class MyTest < Minitest::Test def test_делење # Тврђење: резултат делње 4 са 2 је 2 assert_equal 2, 4 / 2 # Тврђење: делење нулом треба да изазове изузетак ZeroDivisionError assert_raises(ZeroDivisionError) { 1 / 0 } end end