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