Sobes.tech
Middle+

Жобанын белгилүү бир бөлүгүнүн ишин бузуу үчүн кандай механизмдер бар?

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(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 сигналын иштетүү
    Signal.trap("INT") { puts "\nSIGINT кабыл алынды. Аякталууда..."; exit }
    
    loop { sleep 1 }
    
  • Тастыктоолор (Assertions) — өзгөчө өнүктүрүү жана тестирлөөдө: Шарттарды текшерүү механизмдери, шарт бузулганда ката чыгарат:

    # 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