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 هي الطريقة التي تنشئ بها استثناءً خاصاً بك. قم بتمرير سلسلة نصية للرسالة، أو فئة (class) بالإضافة إلى رسالة:

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

العرف هو استخدام raise مبكراً، في بداية الدالة (method)، للفشل السريع عندما تكون الوسائط خاطئة. يمكن للمستدعي (caller) استخدام 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.

ورقة مرجعية

يعمل ensure بغض النظر عما يحدث (خروج طبيعي، أو تم الإنقاذ، أو استثناء لم يتم التقاطه) — استخدمه لعمليات التنظيف:

begin
  raise "something broke"
rescue
  puts "caught it"
ensure
  puts "always runs"
end

يقوم raise بإنشاء استثناء. قم بتمرير فئة (class) ورسالة لرفع نوع محدد:

raise ArgumentError, "amount must be positive" if amount <= 0

العرف البرمجي: قم بالرفع (raise) مبكراً في بداية الدالة للفشل السريع عند وجود وسائط خاطئة.

جرّب بنفسك

# مهام: قم بتعريف safe_divide(a, b)، يثير ArgumentError عندما تكون b == 0

a = gets.to_i
b = gets.to_i

# مهام: begin ... print Result; rescue ArgumentError => e ... print Error; ensure ... print Done.
quiz iconاختبر نفسك

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

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