أنماط Find والحراس
الشروط في المطابقات
أنماط Find والحراس درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.
شروط الحراسة
أضف حارسًا باستخدام if أو unless إلى النمط. ولا يطابق الفرع إلا عند نجاح النمط والشرط معًا.
case 7
in Integer => n if n.odd?
puts 'odd integer'
endتستخدم الحراس المتغيرات المرتبطة
يمكن للحارس الرجوع إلى المتغيرات التي ربطها النمط، مما يتيح لك التعبير عن شروط غنية حول البيانات المطابقة.
case [4, 9]
in [a, b] if a < b
puts 'ascending pair'
endحراس unless
يطابق حارس unless عندما يكون الشرط خاطئًا، أي بعكس if.
case 0
in Integer => n unless n.positive?
puts 'zero or negative'
endفروع متعددة محروسة
اجمع الحراس عبر الفروع لبناء تسلسل قرارات واضح.
def grade(score)
case score
in Integer => s if s >= 90 then 'A'
in Integer => s if s >= 70 then 'B'
else 'C'
end
end
puts(grade(85))أنماط البحث
يبحث نمط البحث [*, x, *] في مصفوفة عن نمط فرعي في أي موضع داخلها، باستخدام Splat في الطرفين.
case [1, 2, 3, 4]
in [*, 3, *]
puts 'contains a 3'
endالربط داخل البحث
يمكن ربط العنصر المطابق في نمط البحث، مما يلتقط القيمة التي عُثر عليها.
case [10, 20, 30]
in [*, x, *] if x > 25
puts("found #{x}")
endالتقاط العناصر المحيطة
يمكن تسمية كل من Splat في نمط البحث لالتقاط العناصر التي تسبق المطابقة وتلك التي تليها.
case [1, 2, 99, 4, 5]
in [*before, 99, *after]
p before
p after
endالبحث عن عنصر من نوع محدد
تتحد أنماط البحث مع أنماط الأنواع للعثور على أول عنصر من نوع محدد.
case [1, 'hi', 2]
in [*, String => word, *]
puts(word)
endالحراس مقابل الأنماط
عبّر عما يمكنك التعبير عنه بنيويًا داخل النمط، واستخدم الحراس فقط للشروط التي لا تستطيع الأنماط تمثيلها، مثل المقارنات العددية أو استدعاءات الأساليب.
case { role: 'admin', age: 40 }
in { role: 'admin', age: } if age >= 18
puts 'adult admin'
endالجمع بين البحث والحارس
تتيح لك أنماط البحث والحراس معًا طرح السؤال التالي: هل يحقق أي عنصر هذا الشرط؟
numbers = [3, 5, 8, 11]
case numbers
in [*, n, *] if n.even?
puts("first even-ish hit: #{n}")
endترتيب الفروع
تُجرَّب الفروع من الأعلى إلى الأسفل، وتفوز أول مطابقة. ضع الأنماط المحروسة الأكثر تحديدًا قبل الأنماط العامة.
case 100
in Integer => n if n > 50 then puts 'big'
in Integer then puts 'small'
endاختبار سريع
ما الذي يفعله نمط البحث [*, x, *]؟
مراجعة: أنماط البحث والحراس
أضفت الشروط والبحث إلى المطابقة:
- يعمل الحارسان
ifوunlessعلى تحسين النمط - يمكن للحراس استخدام المتغيرات المرتبطة
- تبحث أنماط البحث
[*, x, *]في أي موضع - يمكن تسمية كلا Splat لالتقاط العناصر المحيطة
- يفوز أول فرع مطابق، لذا يهم الترتيب
case [1, 7, 3]
in [*, x, *] if x > 5 then puts x
endالأسئلة الشائعة
هل درس «أنماط Find والحراس» مجاني؟
نعم — نص درس «أنماط Find والحراس» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ماذا ستتعلم في «أنماط Find والحراس»؟
الشروط في المطابقات تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟
لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «أنماط Find والحراس»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟
نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات case/in
- أنماط Array وHash
- أنماط Find والحراس
- حالات الاستخدام العملية