النطاقات في Case / When
جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy — الدرس 8 من 56.
تتألق النطاقات (Ranges) داخل جملة case في لغة روبي. فبينما تحتاج العديد من اللغات إلى سلسلة من if/elsif مع معاملات المقارنة، تتيح لك روبي مطابقة قيمة مقابل النطاقات مباشرةً.
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # Cخلف الكواليس، يستخدم when 70..79 عامل التشغيل === الخاص بالنطاق، وهو ما يعادل (70..79).include?(score).
تعتبر صيغة case أقصر، وأسهل في القراءة، وأسرع في الكتابة من سلسلة if/elsif الطويلة.
التحدي
سهلاقرأ قائمة من الأعمار الصحيحة مفصولة بفاصلة. لكل عمر، قم بتصنيفه باستخدام جملة case مع النطاقات (ranges):
0..12:Child13..19:Teen20..64:Adult65أو أكثر:Senior- أي شيء آخر (سالب): يتم تخطيه، ولا يظهر في التقرير
اطبع سطر عد لكل فئة غير صفرية، بهذا الترتيب الثابت: Child، Teen، Adult، Senior. تخطَّ الفئات التي لا تحتوي على أشخاص. بعد عمليات العد، اطبع Skipped: <n> حيث n هو عدد الأعمار السالبة (غير الصالحة).
للمدخلات 5,15,30,70,-3,40,12، يكون المخرج:
Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1ورقة مرجعية
استخدم النطاقات في جمل case — تطابق روبي عبر === (ما يعادل include?):
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # Cجرّب بنفسك
ages = gets.chomp.split(",").map(&:to_i)
# مهمة: تصنيف كل عمر باستخدام case + النطاقات، والعد لكل فئة، وطباعة التقرير
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق العمليات
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