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 tamamlar.

ensure, ne olursa olsun çalışan bir bloktur; begin normal şekilde tamamlanmış, bir rescue dalı bir istisnayı yakalamış veya istisna yakalanmamış olsa bile çalışır. Temizleme kodunu buraya koyarsı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şturmanın yoludur. Mesaj için bir dize veya bir sınıf ile birlikte bir mesaj geçirin:

def withdraw(amount)
  raise ArgumentError, "amount must be positive" if amount <= 0
  # ... para çekimini yap
end

Bir kural olarak, bağımsız değişkenler yanlış olduğunda hızlıca başarısız olmak için yöntemin en başında raise kullanılır. Çağıran tarafın mantıklı bir kurtarma yöntemi varsa rescue kullanabilir veya hatanın üst katmanlara iletilmesine izin verebilir.

challenge icon

Görev

Kolay

Şunları yapan bir safe_divide(a, b) yöntemi tanımlayın:

  • b == 0 ise, "b cannot be zero" mesajıyla ArgumentError oluşturur
  • Aksi takdirde a / b değerini döndürür

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

  • Başarılı olursa Result: <value> yazdırın
  • ArgumentError durumunda Error: <message> yazdırın
  • ensure içinde 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

# TODO: safe_divide(a, b) tanımla, b == 0 olduğunda ArgumentError fırlatır

a = gets.to_i
b = gets.to_i

# TODO: 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

Kendi başına pratik yap: Online Ruby derleyicisi