النطاقات والتعداد

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

النطاقات والتعداد (Ranges & Enumerables)

النطاقات (Ranges) هي طريقة أنيقة لتمثيل تسلسل من القيم، والتعداد (Enumerables) هي مجموعة قوية من الدوال للتعامل مع المجموعات. معاً، تُشكّل أدوات أساسية لمعالجة البيانات في روبي.

ما هو النطاق؟

النطاق يُمثّل تسلسلاً متتابعاً من القيم، من قيمة بداية إلى قيمة نهاية.

أنواع النطاقات

النطاق الشامل (Inclusive): نقطتان ..

يشمل القيمة الأولى والأخيرة:

النطاق الحصري (Exclusive): ثلاث نقاط ...

يشمل القيمة الأولى بدون الأخيرة:

جدول مقارنة النطاقات

النوعالرمزالمثالالنتيجة
شامل..1..51, 2, 3, 4, 5
حصري...1...51, 2, 3, 4

استخدامات النطاقات

التكرار باستخدام each

الناتج:

التحقق من الانتماء (include?)

نطاقات الحروف

النطاقات في case/when

قطع النصوص والمصفوفات

معلومات عن النطاق

التعداد (Enumerables)

التعداد (Enumerable) هو وحدة (module) تُضاف للمصفوفات والقواميس والنطاقات، وتوفر دوال قوية لمعالجة المجموعات.

الدوال الأساسية للتعداد

each - التكرار الأساسي

الناتج:

each_with_index - التكرار مع الفهرس

الناتج:

map (أو collect) - التحويل

تُطبّق عملية على كل عنصر وتُرجع مصفوفة جديدة:

select (أو find_all) - التصفية

تُرجع العناصر التي تُحقق شرطاً معيناً:

reject - عكس select

تُرجع العناصر التي لا تُحقق الشرط:

find (أو detect) - البحث عن أول عنصر

تُرجع أول عنصر يُحقق الشرط:

find_all vs find

reduce (أو inject) - التجميع

تُجمّع كل العناصر في قيمة واحدة:

any? و all? و none?

count - العدّ بشرط

take و drop

partition - التقسيم

تُقسّم المجموعة إلى مصفوفتين بناءً على شرط:

group_by - التجميع

جدول ملخص: دوال التعداد الأساسية

الدالةالوصفنوع الناتج
eachالتكرار على كل عنصرالمصفوفة الأصلية
mapتحويل كل عنصرمصفوفة جديدة
selectتصفية العناصر المطابقةمصفوفة جديدة
rejectتصفية العناصر غير المطابقةمصفوفة جديدة
findالبحث عن أول عنصر مطابقعنصر واحد أو nil
reduceتجميع في قيمة واحدةقيمة واحدة
any?هل يوجد عنصر مطابق؟true/false
all?هل كل العناصر مطابقة؟true/false
none?هل لا يوجد عنصر مطابق؟true/false
countعدد العناصر (المطابقة)رقم

سلسلة الدوال (Method Chaining)

يمكن ربط عدة دوال معاً للحصول على نتائج معقدة:

أمثلة عملية

مثال 1: تصفية وتحويل بيانات الطلاب

مثال 2: معالجة قائمة أسعار

مثال 3: تحليل النص

الناتج:

مثال 4: التحقق من بيانات

الفرق بين each و map

نصائح مهمة

  1. استخدم map للتحويل - عندما تريد تغيير كل عنصر
  2. استخدم select للتصفية - عندما تريد اختيار عناصر معينة
  3. استخدم find للبحث - عندما تريد أول عنصر مطابق فقط
  4. استخدم reduce للتجميع - عندما تريد قيمة واحدة من مجموعة
  5. سلسل الدوال - للحصول على شيفرة أنظف وأوضح
  6. .. شامل، ... حصري - تذكر الفرق بين نوعي النطاق

تمرين: تصفية وتحويل البيانات

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

المطلوب:

  1. أنشئ مصفوفة numbers تحتوي على الأرقام من 1 إلى 20 باستخدام النطاق
  2. استخدم select لاختيار الأرقام الزوجية فقط
  3. استخدم map لضرب كل رقم في 3
  4. استخدم reduce لحساب مجموع النتائج
  5. اطبع النتائج بهذا الترتيب:
    • المصفوفة الأصلية (الأرقام من 1-20)
    • الأرقام الزوجية
    • الأرقام مضروبة في 3
    • المجموع النهائي

تلميحات:

  • لإنشاء المصفوفة من نطاق: numbers = (1..20).to_a
  • للتصفية: evens = numbers.select { |n| n.even? }
  • للتحويل: tripled = evens.map { |n| n * 3 }
  • للمجموع: sum = tripled.reduce(:+) أو tripled.sum
  • استخدم p لطباعة المصفوفات

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


تذكّر: النطاقات والتعداد أدوات قوية تجعل شيفرتك أكثر إيجازاً وقراءة!