مراجعة Blocks
تمرير Blocks إلى الدوال
مراجعة Blocks درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.
تمرير الكتل إلى الأساليب
الكتلة هي جزء من التعليمات البرمجية تمررونه إلى أسلوب. تقبل العديد من أساليب Ruby، مثل each، كتلةً وتشغّلها نيابةً عنكم. وتشكل الكتل أساس أسلوب Ruby المعبر.
[1, 2, 3].each do |n|
puts n * 10
endصيغتا الكتل
استخدموا do ... end للكتل متعددة الأسطر، والأقواس المعقوفة { } للتعليمات القصيرة المكوّنة من سطر واحد. ولهما السلوك نفسه.
[1, 2, 3].each { |n| puts n }معاملات الكتلة
الأسماء الواقعة بين الشرطتين العموديتين | | هي معاملات الكتلة. ويحدد الأسلوب القيم التي يمررها إليها.
{ a: 1, b: 2 }.each do |key, value|
puts "#{key} = #{value}"
endيستدعي yield الكتلة
يشغّل yield داخل الأسلوب أي كتلة تم تمريرها. ولا تحتاجون إلى التصريح عن الكتلة في قائمة المعاملات لاستخدام yield.
def twice
yield
yield
end
twice { puts "Hi" }yield مع الوسائط
مرّروا القيم إلى الكتلة من خلال yield. وستصل هذه القيم إلى معاملات الكتلة.
def greet_each(names)
names.each { |n| yield n }
end
greet_each(["Ann", "Bo"]) { |name| puts "Hello #{name}" }block_given?
يؤدي استدعاء yield من دون كتلة إلى إطلاق خطأ. تحقّقوا أولًا باستخدام block_given? لجعل الكتلة اختيارية.
def maybe
if block_given?
yield
else
puts "No block provided"
end
end
maybe
maybe { puts "Block ran" }الكتل تعيد القيم
يُقيَّم محتوى الكتلة وفق آخر تعبير فيها. وتجمع أساليب مثل map تلك القيم المعادة في مصفوفة جديدة.
squares = [1, 2, 3, 4].map { |n| n * n }
p squaresقيمة yield
يعيد yield نفسه قيمة الكتلة، ولذلك يمكن للأسلوب تحويل المدخل من خلال كتلة يزوّده بها المستدعي.
def transform(x)
yield x
end
result = transform(5) { |n| n + 100 }
puts resultالتقاط كتلة باستخدام &
ضعوا & قبل المعامل الأخير لالتقاط الكتلة باعتبارها كائن Proc يمكنكم تخزينه أو تمريره لاحقًا.
def run(&block)
block.call
end
run { puts "Called via block.call" }المعاملات المرقّمة
تتيح لكم Ruby الحديثة تخطّي تسمية مُعامل واحد للكتلة باستخدام _1 أو it في Ruby 3.4 والإصدارات الأحدث. وهذا مفيد للكتل الصغيرة جدًا.
[10, 20, 30].each { puts _1 }جمع المفاهيم
تتيح الكتل للطرائق استقبال السلوك:
- تُمرَّر كتلة باستخدام
do...endأو{ }. - ينفّذها
yield، بينما يتحقّقblock_given?من وجودها. - يحوّلها
&blockإلى كائن قابل لإعادة الاستخدام.
def repeat(times)
return unless block_given?
times.times { |i| yield i }
end
repeat(3) { |i| puts "Step #{i}" }اختبار سريع
اختبروا فهمكم للكتل.
مراجعة
راجعتم الكتل:
- تمرّر الكتل السلوك إلى الطرائق عبر
do...endأو{ }. - ينفّذ
yieldالكتلة ويعيد قيمتها. - يجعل
block_given?استخدام الكتل اختياريًا. - يلتقط
&blockالكتلة في كائن Proc.
def wrap
puts "<<"
yield
puts ">>"
end
wrap { puts "content" }الأسئلة الشائعة
هل درس «مراجعة Blocks» مجاني؟
نعم — نص درس «مراجعة Blocks» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ماذا ستتعلم في «مراجعة Blocks»؟
تمرير Blocks إلى الدوال تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟
لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «مراجعة Blocks»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟
نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مراجعة Blocks
- Procs
- Lambdas
- Closures والنطاق