Menu
Coddy logo textTech

ensure ve raise

Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 46 / 56.

Hata işleme araç setini iki parça daha tamamlıyor.

ensure; begin bloğu normal şekilde tamamlansa da, bir rescue dalı bir istisnayı yakalasa da, hatta istisna yakalanmamış olsa bile ne olursa olsun çalışan bir bloktur. Temizleme kodunu buraya yazarsınız:

begin
  puts "opening file"
  raise "something broke"
rescue
  puts "caught it"
ensure
  puts "closing file"
end
# dosya açılıyor
# yakalandı
# dosya kapatılıyor

raise, kendi istisnanızı oluşturma yönteminizdir. Mesaj için bir dize veya bir sınıf ile birlikte bir mesaj iletin:

def withdraw(amount)
  raise ArgumentError, "amount must be positive" if amount <= 0
  # ... para çekme işlemini yapın
end

Genel kural, argümanlar yanlış olduğunda hızlıca hata vermek (fail fast) için bir metodun en başında raise etmektir. Çağıran taraf, mantıklı bir kurtarma yolu varsa rescue edebilir veya hatanın yukarı yayılmasına izin verebilir.

challenge icon

Görev

Kolay

Aşağıdakileri gerçekleştiren bir safe_divide(a, b) metodu tanımlayın:

  • Eğer b == 0 ise "b cannot be zero" mesajıyla birlikte bir ArgumentError hatası fırlatır
  • Aksi takdirde a / b sonucunu döndürür

Ardından girdiden iki tam sayı okuyun. safe_divide metodunu begin / rescue / ensure blokları içinde çağırın:

  • Başarılı olduğunda, Result: <value> yazdırın
  • ArgumentError durumunda, Error: <message> yazdırın
  • ensure bloğunda, her zaman Done. yazdırın

10 / 2 girdisi için çıktı şöyledir:

Result: 5
Done.

10 / 0 girdisi için:

Error: b cannot be zero
Done.

Kendin dene

# YAPILACAK: safe_divide(a, b) tanımlayın, b == 0 olduğunda ArgumentError hatası fırlatır

a = gets.to_i
b = gets.to_i

# YAPILACAK: begin ... Result yazdır; rescue ArgumentError => e ... Error yazdır; ensure ... Done yazdır.
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler