Layihənin müəyyən bir hissəsinin işini pozmaq üçün hansı mexanizmlər mövcuddur?
sobes.tech Süni İntellekt
AI-dan cavab
-
İstisnalar (Exceptions): Xətanın baş verməsi halında kodun icrasını dayandırmağa və idarəni
begin/rescue/ensurebloklarına keçirməyə imkan verir.begin # Xəta törədə biləcək kod result = 1 / 0 rescue ZeroDivisionError => e # Xüsusi xətanın işlənməsi puts "Sıfıra bölmə xətası: #{e.message}" # Yeyim qeydiyyatı və ya alternativ icra rescue StandardError => e # Digər standart xətaların işlənməsi puts "Başqa bir xəta baş verdi: #{e.message}" ensure # Hər zaman icra olunan kod puts "Blok tamamlandı" end -
Raise: Açıqlama ilə istisna yaratmaq, həm standart, həm də xüsusi xəta sinfləri üçün.
# Normal istisna yaratma raise "Bir şey səhv getdi" # Müəyyən bir xəta sinfi ilə yaratma raise MyCustomError, "Etibarsız dəyər" -
exit,abort,Kernel#exit!: Proqramın icrasını dayandırmaq üçün metodlar.exit!dərhal proqramı dayandırır,at_exitişləyicilərini çağırmadan.# Normal proqram sonlandırması exit(0) # 0 uğurlu sonlandırma deməkdir # Xəta ilə sonlandırma abort("Kritik xəta səbəbindən sonlandırılır") # Zorla sonlandırma Kernel.exit!(1) -
Thread#raise: Başqa bir icra axınında istisna yaratmağa imkan verir.
thread = Thread.new do begin loop { sleep 1 } rescue => e puts "İş parçası tutuldu: #{e.class}" end end sleep 2 thread.raise StandardError, "İş parçasını dayandır" thread.join -
Proqramlaşdırma xətaları (məntiqi, sintaktik): Yaxşı yazılmamış kod icra zamanı uğursuzluqlara səbəb ola bilər.
# Sintaktik xəta (end çatışmır) def my_method puts "Salam" # Məntiqi xəta (sonsuz döngü) while true puts "Döngü" end -
Əməliyyat sistemi siqnalları (SIGTERM, SIGINT və s.): Xaricdən proqramın icrasını dayandıra bilər.
# SIGINT (Ctrl+C) siqnalını idarə etmək üçün sadə nümunə Signal.trap("INT") { puts "\nSIGINT alındı. Sonlandırılır..."; exit } loop { sleep 1 } -
Təsdiqlər (xüsusən inkişaf və test zamanı): Şərtləri yoxlama mexanizmləri, pozulduqda istisna və ya başqa hərəkətə səbəb olur. Ruby-də tez-tez test kitabxanaları ilə həyata keçirilir.
# MiniTest kitabxanası ilə nümunə require 'minitest/autorun' class MyTest < Minitest::Test def test_bölmə # Təsdiqləmə: 4-ün 2-yə bölünməsi nəticəsi 2-dir assert_equal 2, 4 / 2 # Təsdiqləmə: sıfıra bölmə ZeroDivisionError çıxarmalıdır assert_raises(ZeroDivisionError) { 1 / 0 } end end