أنماط Array وHash
تفكيك البيانات
أنماط Array وHash درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.
أنماط المصفوفات
يطابق نمط المصفوفة حسب الموضع والطول. ويُفحَص كل نمط عنصر مقابل العنصر المناظر له.
case [1, 2, 3]
in [1, 2, 3]
puts 'exact match'
endربط عناصر المصفوفة
استخدم المعرّفات لالتقاط كل موضع في متغير.
case [10, 20]
in [x, y]
puts(x + y)
endأهمية الطول
يتطلب نمط المصفوفة افتراضيًا الطول المطابق تمامًا. لذلك لا يطابق نمط مكوّن من عنصرين مصفوفةً مكوّنة من ثلاثة عناصر.
case [1, 2, 3]
in [a, b]
puts 'two'
in [a, b, c]
puts 'three'
endSplat لبقية العناصر
يلتقط Splat *rest أي عدد من العناصر المتبقية داخل مصفوفة، مما يجعل الطول مرنًا.
case [1, 2, 3, 4]
in [first, *rest]
puts(first)
p rest
endSplat في المنتصف
يمكن وضع Splat بين عناصر ثابتة لالتقاط البداية والنهاية مع تجاهل الوسط.
case [1, 2, 3, 4, 5]
in [first, *, last]
puts("#{first} ... #{last}")
endأنماط Hash
يطابق نمط Hash حسب المفاتيح. فهو يتحقق من وجود المفاتيح المحددة ومن مطابقة قيمها، مع السماح بالمفاتيح الإضافية.
case { name: 'Ada', age: 36 }
in { name: 'Ada' }
puts 'found Ada'
endربط قيم Hash
لالتقاط قيمة، امنح المفتاح اسم ربط. أما كتابة المفتاح وحده فتربطه بمتغير يحمل الاسم نفسه.
case { name: 'Bob', age: 25 }
in { name: String => n, age: Integer => a }
puts("#{n} is #{a}")
endالربط المختصر للمفاتيح
يؤدي حذف النمط بعد المفتاح إلى ربط متغير يحمل اسم المفتاح تلقائيًا.
case { city: 'Istanbul' }
in { city: }
puts(city)
endاشتراط عدم وجود مفاتيح إضافية
تتجاهل أنماط Hash المفاتيح الإضافية افتراضيًا. أضف **nil لاشتراط وجود المفاتيح المدرجة فقط.
case { a: 1 }
in { a: 1, **nil }
puts 'exactly one key'
endالأنماط المتداخلة
يمكن تداخل الأنماط بحرية، مما يتيح لك تفكيك البنى العميقة في فرع واحد.
data = { user: { name: 'Ada', tags: ['admin', 'dev'] } }
case data
in { user: { name:, tags: [first_tag, *] } }
puts("#{name}: #{first_tag}")
endمطابقة JSON المحلَّل
تتوافق مطابقة الأنماط بشكل رائع مع بيانات JSON أو CSV المحلَّلة، إذ تستخرج الحقول التي تحتاج إليها تحديدًا.
require 'json'
resp = JSON.parse('{"status":"ok","items":[1,2,3]}', symbolize_names: true)
case resp
in { status: 'ok', items: }
puts(items.sum)
endاختبار سريع
هل سيطابق نمط Hash in { a: 1 } افتراضيًا Hash { a: 1, b: 2 }؟
مراجعة: أنماط المصفوفات وHash
يمكنك تفكيك المجموعات:
- تطابق أنماط المصفوفات حسب الموضع والطول
- يلتقط
*restالعناصر المتبقية - تطابق أنماط Hash حسب المفتاح مع السماح بالمفاتيح الإضافية
- يربط الاختصار
{ key: }متغيرات تحمل الأسماء نفسها - يمنع
**nilالمفاتيح الإضافية، ويمكن تداخل الأنماط بعمق
case { id: 1, items: [9, 8] }
in { items: [head, *] } then puts head
endالأسئلة الشائعة
هل درس «أنماط Array وHash» مجاني؟
نعم — نص درس «أنماط Array وHash» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ماذا ستتعلم في «أنماط Array وHash»؟
تفكيك البيانات تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟
لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «أنماط Array وHash»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟
نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات case/in
- أنماط Array وHash
- أنماط Find والحراس
- حالات الاستخدام العملية