جملة case/when

تعديل
نسخ الدرس
تحميل الدرس

جملة 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/whenif-elsif-else
مقارنة قيمة واحدة بعدة احتمالاتممتازجيد
شروط معقدة (&&, ||)غير مدعوم مباشرةممتاز
مطابقة نطاقاتممتازيحتاج كتابة أكثر
القراءةأوضح للقيم المتعددةأوضح للشروط المعقدة
إرجاع قيمةمباشريحتاج متغير

جملة then

يمكن استخدام then لكتابة الشيفرة في سطر واحد:

الناتج:

أمثلة عملية

حاسبة بسيطة

الناتج:

نظام تسعير

الناتج:

معالجة استجابة HTTP

الناتج:

نصائح مهمة

  1. استخدم case/when عندما تقارن قيمة واحدة بعدة احتمالات
  2. استخدم if-elsif عندما تحتاج شروطاً معقدة
  3. لا تنسَ else لمعالجة الحالات غير المتوقعة
  4. استفد من النطاقات لتبسيط الشروط الرقمية
  5. تذكر أن 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

تمرين: اسم اليوم

حان وقت التطبيق! في محرر الشيفرة على اليسار:

المطلوب: اكتب برنامجاً يحول رقم اليوم إلى اسمه بالعربية:

  1. عرّف متغير day_number = 4
  2. استخدم case/when لتحديد اسم اليوم:
    • 1: السبت
    • 2: الأحد
    • 3: الإثنين
    • 4: الثلاثاء
    • 5: الأربعاء
    • 6: الخميس
    • 7: الجمعة
    • أي رقم آخر: رقم غير صالح
  3. اطبع اسم اليوم

الناتج المتوقع:

تلميح: استخدم case day_number ثم when 1 وهكذا. تذكر أن تضيف else للأرقام غير الصالحة!


تذكّر: case/when تجعل الشيفرة أنظف وأسهل للقراءة عندما تقارن قيمة واحدة بعدة احتمالات!