Menu
Coddy logo textTech

Birden Fazla rescue İfadesi

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

Bir begin bloğu birden fazla rescue ifadesine sahip olabilir. Ruby bunları yukarıdan aşağıya kontrol eder ve hata sınıfı eşleşen ilkini çalıştırır.

begin
  number = Integer(gets.chomp)
  result = 100 / number
  puts result
rescue ArgumentError
  puts "That's not a valid number."
rescue ZeroDivisionError
  puts "Can't divide by zero."
end

Sıralama önemlidir: genel olanlardan önce özel sınıfları listeleyin. İlk sıraya yerleştirilen StandardError her şeyi yutar ve sonraki dallar asla çalışmaz.

Ayrıca, istisna sınıflarını virgülle listeleyerek tek bir dalda birden fazla istisna sınıfını yakalayabilirsiniz:

begin
  risky_call
rescue ArgumentError, TypeError => e
  puts "Bad input: #{e.message}"
end

Kurtarma kodu birkaç hata modu için aynı olduğunda bunu kullanın.

challenge icon

Görev

Kolay

Girdiden her ikisi de tam sayı olması beklenen iki satır okuyun. Her ikisi için de Integer(...) kullanın, ardından ilkini ikinciye bölün.

Üç durumu ayrı rescue dalları ile ele alın:

  • ArgumentErrorBad number! yazdırın
  • ZeroDivisionErrorCannot divide by zero! yazdırın
  • TypeErrorWrong type! yazdırın

Eğer her şey çalışırsa, Result: <a / b> yazdırın (tam sayı bölmesi).

10 / 2 girdisi için çıktı Result: 5 olur. 10 / 0 için Cannot divide by zero!. 10 / abc için Bad number!.

Kopya kağıdı

Bir begin bloğu birden fazla rescue ifadesine sahip olabilir — Ruby bunları yukarıdan aşağıya doğru eşleştirir:

begin
  number = Integer(gets.chomp)
  result = 100 / number
  puts result
rescue ArgumentError
  puts "That's not a valid number."
rescue ZeroDivisionError
  puts "Can't divide by zero."
end

Genel olanlardan önce özel istisna sınıflarını listeleyin — ilk sıraya yerleştirilen StandardError gibi genel bir sınıf, sonraki tüm dalları yutacaktır.

Virgülle ayırarak tek bir dalda birden fazla istisna sınıfını yakalayın:

rescue ArgumentError, TypeError => e
  puts "Bad input: #{e.message}"

Kendin dene

raw_a = gets.chomp
raw_b = gets.chomp

# YAPILACAK: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
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