Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

جمل rescue متعددة

جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy. الدرس 45 من 56.

يمكن لكتلة begin واحدة أن تحتوي على عدة بنود rescue. يتحقق Ruby منها من الأعلى إلى الأسفل وينفذ البند الأول الذي تفيد فئة الاستثناء الخاصة به بوجود تطابق.

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

الترتيب مهم: اذكر الفئات المحددة (specific) قبل الفئات العامة. وضع StandardError في البداية سيؤدي إلى اعتراض كل شيء ولن يتم تشغيل الفروع اللاحقة أبداً.

يمكنك أيضًا التقاط عدة فئات استثناءات (exception classes) في فرع واحد عن طريق إدراجها تفصل بينها فاصلة:

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

إستخدم هذا عندما يكون كود التعافي هو نفسه لعدة أوضاع فشل.

challenge icon

التحدي

سهل

اقرأ سطرين من المدخلات، وكلاهما يُفترض أن يكونا أعدادًا صحيحة. استخدم Integer(...) لكلاهما، ثم اقسم الأول على الثاني.

تعامل مع ثلاث حالات باستخدام فروع rescue منفصلة:

  • ArgumentError ← اطبع Bad number!
  • ZeroDivisionError ← اطبع Cannot divide by zero!
  • TypeError ← اطبع Wrong type!

إذا نجح كل شيء، اطبع Result: <a / b> (قسمة الأعداد الصحيحة).

بالنسبة للمدخلات 10 / 2، فإن المخرجات هي Result: 5. وبالنسبة لـ 10 / 0، تكون Cannot divide by zero!. وبالنسبة لـ 10 / abc، تكون Bad number!.

جرّب بنفسك

raw_a = gets.chomp
raw_b = gets.chomp

# TODO: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق العمليات

تدرّب بنفسك: مترجم Ruby عبر الإنترنت