صياغة الكتل

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

الكتل البرمجية (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. لديك مصفوفة أرقام: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  2. استخدم select لاختيار الأرقام الزوجية
  3. استخدم map لمضاعفة كل رقم (× 2)
  4. استخدم reduce لحساب المجموع
  5. اطبع النتيجة النهائية

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

تلميحات:

  • ابدأ بالمصفوفة وسلسل الدوال
  • n.even? يُرجع true للأرقام الزوجية
  • reduce(:+) أو reduce(0) { |sum, n| sum + n }

تذكّر: الكتل تجعل شيفرتك أقصر وأوضح. استخدمها مع دوال التكرار والتحويل!