الكتل البرمجية (Blocks)
الكتل البرمجية (Blocks) هي أحد أقوى المفاهيم في روبي. الكتلة هي قطعة من الشيفرة يمكن تمريرها إلى دالة لتنفيذها. هذا يجعل الشيفرة أكثر مرونة وقابلية لإعادة الاستخدام.
ما هي الكتلة؟
الكتلة هي شيفرة مُجمّعة تُمرر لدالة لتنفيذها. فكر فيها كـ"تعليمات إضافية" تُعطيها للدالة.
في هذا المثال، الشيفرة بين do و end هو الكتلة. الدالة each تستدعي هذه الكتلة مرة لكل عنصر في المصفوفة.
صيغتان لكتابة الكتل
روبي تقدم صيغتين لكتابة الكتل:
1. صيغة do...end (للكتل الطويلة)
2. صيغة الأقواس المعقوفة { } (للكتل القصيرة)
متى نستخدم كل صيغة؟
| الصيغة | الاستخدام |
|---|---|
do...end | للكتل متعددة الأسطر |
{ } | للكتل في سطر واحد |
معاملات الكتلة (Block Parameters)
المعاملات بين | | هي المتغيرات التي تستقبل القيم من الدالة:
معامل واحد
معاملان
معامل مع فهرس
الكتل مع each
دالة each هي الأكثر استخداماً مع الكتل:
الكتل مع map
دالة map تُحوّل كل عنصر وتُرجع مصفوفة جديدة:
الكتل مع select
دالة select تُرشّح العناصر بناءً على شرط:
الكتل مع reject
دالة reject عكس select - تُزيل العناصر التي تُطابق الشرط:
الكتل مع find
دالة find تُرجع أول عنصر يُطابق الشرط:
الكتل مع reduce
دالة reduce تُجمّع كل العناصر في قيمة واحدة:
الكتل مع any? و all? و none?
دوال تُرجع true أو false:
تسلسل الدوال مع الكتل (Method Chaining)
يمكن ربط عدة دوال معاً:
الكتل مع times و upto و downto
متغيرات الكتلة المحلية
المتغيرات المُعرّفة داخل الكتلة تكون محلية لها:
لكن الكتلة تستطيع الوصول للمتغيرات الخارجية:
جدول ملخص
| الدالة | الوصف | مثال |
|---|---|---|
each | تكرار على كل عنصر | arr.each { |x| puts x } |
map | تحويل كل عنصر | arr.map { |x| x * 2 } |
select | تصفية بشرط | arr.select { |x| x > 5 } |
reject | إزالة بشرط | arr.reject { |x| x < 0 } |
find | أول عنصر مطابق | arr.find { |x| x.even? } |
reduce | تجميع لقيمة واحدة | arr.reduce(:+) |
any? | هل يوجد مطابق؟ | arr.any? { |x| x > 10 } |
all? | هل الكل مطابق؟ | arr.all? { |x| x > 0 } |
none? | هل لا يوجد مطابق؟ | arr.none? { |x| x < 0 } |
أمثلة عملية
مثال 1: تحليل بيانات المبيعات
مثال 2: معالجة قائمة أسماء
مثال 3: فلترة وتحويل
تمرين: استخدام الكتل
حان وقت التطبيق! في محرر الشيفرة على اليسار:
المطلوب:
- لديك مصفوفة أرقام:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - استخدم
selectلاختيار الأرقام الزوجية - استخدم
mapلمضاعفة كل رقم (× 2) - استخدم
reduceلحساب المجموع - اطبع النتيجة النهائية
الناتج المتوقع:
تلميحات:
- ابدأ بالمصفوفة وسلسل الدوال
n.even?يُرجع true للأرقام الزوجيةreduce(:+)أوreduce(0) { |sum, n| sum + n }
تذكّر: الكتل تجعل شيفرتك أقصر وأوضح. استخدمها مع دوال التكرار والتحويل!