جملة case/when
في الدرس السابق تعلمنا استخدام if-elsif-else لاتخاذ القرارات. لكن عندما يكون لدينا العديد من الحالات للمقارنة، تصبح سلسلة elsif طويلة ومعقدة. هنا يأتي دور case/when.
ما هي جملة case/when؟
جملة case/when هي طريقة أنظف لمقارنة قيمة واحدة مع عدة احتمالات. بدلاً من كتابة:
يمكننا كتابة:
الناتج:
البنية الأساسية
مثال: أيام الأسبوع
الناتج:
ملاحظة: في روبي،
case/whenتُرجع قيمة! لذا يمكنك تعيين نتيجتها لمتغير مباشرة.
مطابقة قيم متعددة
يمكنك مطابقة عدة قيم في سطر when واحد باستخدام الفاصلة:
الناتج:
مثال: تصنيف الحروف
الناتج:
مطابقة النطاقات (Ranges)
ميزة قوية في case/when هي القدرة على مطابقة النطاقات:
الناتج:
تذكير: النطاق
80..89يشمل 80 و 89، بينما80...89يشمل 80 لكن لا يشمل 89.
مثال: فئات العمر
الناتج:
مطابقة النصوص
case/when تعمل مع أي نوع بيانات، بما في ذلك النصوص:
الناتج:
مثال: قائمة طعام
الناتج:
مطابقة الأنماط باستخدام Regex
يمكن استخدام case/when مع التعبيرات المنتظمة (Regular Expressions):
الناتج:
مطابقة الأنواع (Types)
يمكن التحقق من نوع البيانات:
الناتج:
مثال: التعامل مع أنواع مختلفة
الناتج:
case بدون قيمة (Case as If)
يمكن استخدام case بدون قيمة للمقارنة كـ if-elsif:
الناتج:
ملاحظة: هذا الشكل مفيد عندما تحتاج لشروط معقدة، لكن عادةً
if-elsifتكون أوضح في هذه الحالة.
المقارنة: case/when vs if-elsif-else
| الميزة | case/when | if-elsif-else |
|---|---|---|
| مقارنة قيمة واحدة بعدة احتمالات | ممتاز | جيد |
| شروط معقدة (&&, ||) | غير مدعوم مباشرة | ممتاز |
| مطابقة نطاقات | ممتاز | يحتاج كتابة أكثر |
| القراءة | أوضح للقيم المتعددة | أوضح للشروط المعقدة |
| إرجاع قيمة | مباشر | يحتاج متغير |
جملة then
يمكن استخدام then لكتابة الشيفرة في سطر واحد:
الناتج:
أمثلة عملية
حاسبة بسيطة
الناتج:
نظام تسعير
الناتج:
معالجة استجابة HTTP
الناتج:
نصائح مهمة
- استخدم case/when عندما تقارن قيمة واحدة بعدة احتمالات
- استخدم if-elsif عندما تحتاج شروطاً معقدة
- لا تنسَ else لمعالجة الحالات غير المتوقعة
- استفد من النطاقات لتبسيط الشروط الرقمية
- تذكر أن case يُرجع قيمة - يمكنك تعيين النتيجة لمتغير
جدول ملخص
| الصيغة | الوصف | مثال |
|---|---|---|
case x when v | مطابقة قيمة واحدة | when 1 |
when v1, v2 | مطابقة قيم متعددة | when 1, 2, 3 |
when a..b | مطابقة نطاق | when 1..10 |
when /pattern/ | مطابقة نمط | when /^a/ |
when Type | مطابقة نوع | when String |
else | الحالة الافتراضية | else |
تمرين: اسم اليوم
حان وقت التطبيق! في محرر الشيفرة على اليسار:
المطلوب: اكتب برنامجاً يحول رقم اليوم إلى اسمه بالعربية:
- عرّف متغير
day_number = 4 - استخدم
case/whenلتحديد اسم اليوم:- 1: السبت
- 2: الأحد
- 3: الإثنين
- 4: الثلاثاء
- 5: الأربعاء
- 6: الخميس
- 7: الجمعة
- أي رقم آخر: رقم غير صالح
- اطبع اسم اليوم
الناتج المتوقع:
تلميح: استخدم
case day_numberثمwhen 1وهكذا. تذكر أن تضيفelseللأرقام غير الصالحة!
تذكّر:
case/whenتجعل الشيفرة أنظف وأسهل للقراءة عندما تقارن قيمة واحدة بعدة احتمالات!