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/ensurebloklariga 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_exithandlerlarini 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