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

الترتيب مهم: اذكر الفئات المحددة قبل الفئات العامة. وضع StandardError أولًا سيبتلع كل شيء، ولن تُنفَّذ الفروع اللاحقة أبدًا.

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

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 عبر الإنترنت