Sobes.tech
Middle+

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/ensure blokları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_exit iş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