Sobes.tech
Middle+

Loyihaning alohida qismining ishini buzish uchun qanday mexanizmlar mavjud?

sobes.tech AI

AIdan javob

  • İstisnolar (Exceptions): Xato yuzaga kelganda kod bajarilishini to'xtatishga va nazoratni begin/rescue/ensure bloklariga o'tkazishga imkon beradi.

    begin
      # Xato keltirib chiqarishi mumkin bo'lgan kod
      result = 1 / 0
    rescue ZeroDivisionError => e
      # Maxsus xato bilan ishlash
      puts "Nolga bo'linish xatosi: #{e.message}"
      # Yozuv yoki alternativ bajarish imkoniyati
    rescue StandardError => e
      # Boshqa standart xatolar bilan ishlash
      puts "Boshqa xato yuz berdi: #{e.message}"
    ensure
      # Har doim bajariladigan kod
      puts "Blok yakunlandi"
    end
    
  • Raise: Aniq bir xato chiqarish, standart yoki maxsus xato sinflari uchun.

    # Oddiy xato chiqarish
    raise "Nimadir noto'g'ri ketdi"
    
    # Aniq xato sinfi bilan chiqarish
    raise MyCustomError, "Noto'g'ri qiymat"
    
  • exit, abort, Kernel#exit!: Dastur bajarilishini tugatish uchun metodlar. exit! dasturni darhol tugatadi, at_exit handlerlarini chaqirmasdan.

    # Oddiy dastur tugatish
    exit(0) # 0 muvaffaqiyatli tugatishni bildiradi
    
    # Xatolik bilan tugatish
    abort("Kritik xato tufayli tugatildi")
    
    # Majburan tugatish
    Kernel.exit!(1)
    
  • Thread#raise: Boshqa bajarish oqimida xato chiqarish imkonini beradi.

    thread = Thread.new do
      begin
        loop { sleep 1 }
      rescue => e
        puts "Thread qabul qilindi: #{e.class}"
      end
    end
    
    sleep 2
    thread.raise StandardError, "Threadni to'xtatish"
    thread.join
    
  • Dasturlash xatolari (mantiqiy, sintaktik): Yomon yozilgan kod bajarilishida xatolarga olib kelishi mumkin.

    # Sintaktik xato (end yo'q)
    def my_method
      puts "Salom"
    
    # Mantiqiy xato (cheksiz sikl)
    while true
      puts "Sikl"
    end
    
  • Operatsion tizim signallari (SIGTERM, SIGINT va boshqalar): Tashqaridan dastur bajarilishini to'xtatishi mumkin.

    # SIGINT (Ctrl+C) signali bilan oddiy misol
    Signal.trap("INT") { puts "\nSIGINT qabul qilindi. Yakunlanmoqda..."; exit }
    
    loop { sleep 1 }
    
  • Asertlar (xususan rivojlantirish va test qilishda): Shartlarni tekshirish mexanizmlari, shartlar buzilsa, xato chiqaradi yoki boshqa harakat qiladi. Rubyda ular odatda test kutubxonalari bilan amalga oshiriladi.

    # MiniTest kutubxonasi bilan misol
    require 'minitest/autorun'
    
    class MyTest < Minitest::Test
      def test_bolish
        # Tasdiqlash: 4 ning 2 ga bo'linishi 2 ga teng
        assert_equal 2, 4 / 2
        # Tasdiqlash: nolga bo'linish ZeroDivisionError chiqarishi kerak
        assert_raises(ZeroDivisionError) { 1 / 0 }
      end
    end