Sobes.tech
Middle+

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