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

begin / rescue

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

لمنع استثناء من التسبب في تعطل برنامجك، قم بتغليف الكود المحفوف بالمخاطر في begin ... rescue ... end. إذا حدث أي خطأ داخل begin، ينتقل Ruby إلى كتلة rescue المطابقة بدلاً من الإجهاض.

begin
  result = 10 / 0
  puts result
rescue ZeroDivisionError
  puts "Cannot divide by zero!"
end
# لا يمكن القسمة على صفر!

يمكنك الحصول على كائن الاستثناء نفسه باستخدام => e وقراءة .message الخاصة به:

begin
  Integer("hello")
rescue ArgumentError => e
  puts "Bad input: #{e.message}"
end
# Bad input: invalid value for Integer(): "hello"

إذا لم تقم بتسمية فئة استثناء، فإن rescue بمفردها تلتقط StandardError وفروعها، وهي معظم الإخفاقات اليومية. يكون الالتقاط أكثر فائدة عندما يمكنك القيام بشيء ما في كتلة rescue: استبدال قيمة افتراضية، أو تسجيل المشكلة، أو سؤال المستخدم مرة أخرى.

challenge icon

التحدي

سهل

اقرأ سطرين من المدخلات، يجب أن يكون كلاهما أعداداً صحيحة، لكن السطر الثاني قد لا يكون رقماً صالحاً.

قم بلف عملية تحليل السطر الثاني داخل begin / rescue:

  • استخدم Integer(input) (الذي يثير ArgumentError عند وجود سلسلة نصية خاطئة)
  • إذا نجح التحليل، اطبع Sum: <a + b>
  • إذا فشل، اطبع Bad number!

للمدخلات 3 ثم 4، المخرجات هي Sum: 7. للمدخلات 3 ثم abc، تكون Bad number!.

ورقة مرجعية

استخدم begin ... rescue ... end لمعالجة الاستثناءات دون توقف البرنامج:

begin
  result = 10 / 0
rescue ZeroDivisionError
  puts "Cannot divide by zero!"
end

التقط كائن الاستثناء باستخدام => e للوصول إلى رسالته:

begin
  Integer("hello")
rescue ArgumentError => e
  puts "Bad input: #{e.message}"
end

استخدام rescue بدون تحديد فئة يلتقط StandardError وفئاته الفرعية.

جرّب بنفسك

a = gets.to_i
raw_b = gets.chomp

# مهمة: استخدم begin/rescue حول Integer(raw_b)؛ اطبع المجموع أو "Bad number!"
quiz iconاختبر نفسك

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

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