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

ensure و raise

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

قطعتان إضافيتان تُكملان مجموعة أدوات معالجة الأخطاء.

ensure هي كتلة تُنفَّذ بغضّ النظر عن أي شيء، سواء انتهت begin بشكل طبيعي، أو التقط فرع rescue استثناءً، أو حتى إذا لم يتم التقاط الاستثناء. هذا هو المكان الذي تضع فيه رمز التنظيف:

begin
  puts "opening file"
  raise "something broke"
rescue
  puts "caught it"
ensure
  puts "closing file"
end
# فتح الملف
# تم التقاطه
# إغلاق الملف

raise هي الطريقة التي تنشئ بها استثناءً خاصًا بك. مرِّر سلسلة نصية للرسالة، أو فئةً مع رسالة:

def withdraw(amount)
  raise ArgumentError, "amount must be positive" if amount <= 0
  # ... قم بالسحب
end

من المتعارف عليه استخدام raise مبكرًا، في بداية الطريقة، للفشل بسرعة عندما تكون الوسائط غير صحيحة. يمكن للمستدعي استخدام rescue إذا كان لديه إجراء تعافٍ مناسب، أو ترك الخطأ يتصاعد.

challenge icon

التحدي

سهل

عرّف طريقة safe_divide(a, b) التي:

  • تُطلق ArgumentError مع الرسالة "b cannot be zero" إذا كان b == 0
  • وإلا تُعيد a / b

ثم اقرأ عددين صحيحين من الإدخال. استدعِ safe_divide داخل begin / rescue / ensure:

  • عند النجاح، اطبع Result: <value>
  • عند حدوث ArgumentError، اطبع Error: <message>
  • في ensure، اطبع دائمًا Done.

بالنسبة للإدخال 10 / 2، يكون الناتج:

Result: 5
Done.

بالنسبة للإدخال 10 / 0:

Error: b cannot be zero
Done.

جرّب بنفسك

# TODO: عرّف safe_divide(a, b)، ترفع ArgumentError عندما يكون b == 0

a = gets.to_i
b = gets.to_i

# TODO: begin ... اطبع Result؛ rescue ArgumentError => e ... اطبع Error؛ ensure ... اطبع Done.
quiz iconاختبر نفسك

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

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

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