Projenin belirli bir bölümünün çalışmasını engellemek için hangi mekanizmalar vardır?
sobes.tech yapay zeka
AI'dan gelen yanıt
-
İstisnalar (Exceptions): Hata oluştuğunda kodun yürütülmesini durdurmaya ve kontrolü
begin/rescue/ensurebloklarına aktarmaya olanak tanır.begin # Hata oluşturabilecek kod result = 1 / 0 rescue ZeroDivisionError => e # Özel hata işleme puts "Sıfıra bölme hatası: #{e.message}" # Günlük kaydı veya alternatif yürütme olasılığı rescue StandardError => e # Diğer standart hataların işlenmesi puts "Başka bir hata oluştu: #{e.message}" ensure # Her zaman çalıştırılan kod puts "Blok sonu" end -
Raise: Açıkça bir istisna tetikleme, hem standart hem de özel hata sınıfları için.
# Normal istisna tetikleme raise "Bir şeyler ters gitti" # Belirli bir hata sınıfı ile tetikleme raise MyCustomError, "Geçersiz değer" -
exit,abort,Kernel#exit!: Programın yürütülmesini sonlandırmak için kullanılan yöntemler.exit!programı hemen sonlandırır,at_exitişleyicilerini çağırmadan.# Normal program sonlandırma exit(0) # 0 başarılı sonlandırma anlamına gelir # Hata ile sonlandırma abort("Kritik hata nedeniyle sonlandırılıyor") # Zorunlu sonlandırma Kernel.exit!(1) -
Thread#raise: Başka bir yürütme akışında istisna tetikleme.
thread = Thread.new do begin loop { sleep 1 } rescue => e puts "İşlem yakalandı: #{e.class}" end end sleep 2 thread.raise StandardError, "İşlemi durdur" thread.join -
Programlama hataları (mantıksal, sözdizimsel): Kötü yazılmış kodlar çalışma sırasında hatalara yol açabilir.
# Sözdizimi hatası (end eksik) def my_method puts "Merhaba" # Mantıksal hata (sonsuz döngü) while true puts "Döngü" end -
İşletim sistemi sinyalleri (SIGTERM, SIGINT vb.): Programın dışarıdan kesilmesine neden olabilir.
# SIGINT (Ctrl+C) sinyalini yakalama örneği Signal.trap("INT") { puts "\nSIGINT yakalandı. Sonlandırılıyor..."; exit } loop { sleep 1 } -
Doğrulamalar (özellikle geliştirme ve test sırasında): Koşulları kontrol eden mekanizmalar, ihlal edilirse istisna atar veya başka bir işlem yapar. Ruby'de genellikle test kütüphaneleriyle uygulanır.
# MiniTest kütüphanesi kullanımıyla örnek require 'minitest/autorun' class MyTest < Minitest::Test def test_bölme # Doğrulama: 4'ün 2'ye bölümü sonucu 2 olmalı assert_equal 2, 4 / 2 # Doğrulama: sıfıra bölme ZeroDivisionError hatası vermeli assert_raises(ZeroDivisionError) { 1 / 0 } end end