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
# إدخال سيء: قيمة غير صالحة لـ Integer(): "hello"إذا لم تقم بتسمية فئة استثناء، فإن rescue بمفردها تلتقط StandardError ومتحدراتها، وهي معظم الأخطاء اليومية. يكون الالتقاط أكثر فائدة عندما يمكنك فعل شيء ما في كتلة rescue: استبدال قيمة افتراضية، أو تسجيل المشكلة، أو سؤال المستخدم مرة أخرى.
التحدي
سهلاقرأ سطرين من الإدخال، يجب أن يكون كلاهما أعدادًا صحيحة، ولكن السطر الثاني قد لا يكون رقمًا صالحًا.
قم بتغليف تحليل السطر الثاني في begin / rescue:
- استخدم
Integer(input)(الذي يرفعArgumentErrorعند إدخال نص غير صالح) - إذا نجح التحليل، اطبع
Sum: <a + b> - إذا فشل، اطبع
Bad number!
بالنسبة للإدخال 3 ثم 4، تكون المخرجات Sum: 7. بالنسبة للإدخال 3 ثم abc، تكون المخرجات Bad number!.
جرّب بنفسك
a = gets.to_i
raw_b = gets.chomp
# TODO: begin/rescue حول Integer(raw_b)؛ اطبع المجموع أو النص الدقيق من التعليمات
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق العمليات
1السلاسل النصية بعمق
نظرة عامة على دوال السلاسل النصيةتضمين النصوص (String Interpolation)التكرار عبر السلاسل النصيةالتقسيم والربط (Split و Join)مراجعة - نساج النصوص4Blocks و Procs و Lambdas
ما هو الـ Block؟do..end مقابل الأقواس { }الكلمة المفتاحية yieldمعاملات الـ BlockProcs و Lambdasمراجعة - Custom Iterator مخصص7Hashes - الجزء الثاني
Hash.new مع القيم الافتراضيةالتكرار عبر الـ Hashesالـ Hashes المتداخلةالدمج والتحويلمراجعة - عداد التكرار10مشروع - سجلات الطلاب
نظرة عامة على المشروعإضافة طالب5قوة الـ Enumerable
Select و Rejectتسلسل MapReduce / Injectcount، all?، any?، none?group_by و partitionsort_by، min_by، max_byمراجعة - Data Pipelineتدرّب بنفسك: مترجم Ruby عبر الإنترنت