do..end مقابل الأقواس { }
جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy — الدرس 16 من 56.
تمنحك لغة Ruby طريقتين لكتابة block. كلاهما يؤديان نفس المعنى، ولكن لكل منهما حالة استخدام مفضلة.
do...end تُستخدم للكتل البرمجية متعددة الأسطر:
[1, 2, 3].each do |n|
doubled = n * 2
puts "#{n} -> #{doubled}"
endالأقواس المتعرجة { ... } تُستخدم لكتل السطر الواحد، القصيرة، والتي تأتي على شكل تعبير:
[1, 2, 3].each { |n| puts n * 2 }لكليهما أسبقية مختلفة قليلاً، لكن القاعدة التي يحتاجها المتعلمون هي قاعدة الأسلوب: الأقواس للأسطر المنفردة، do...end للأسطر المتعددة.
يمكن لكلا الشكلين إرجاع قيمة. التعبير الأخير في الكتلة (block) هو ما يتم تمريره مرة أخرى إلى أساليب مثل map:
[1, 2, 3].map { |n| n * 10 } # [10, 20, 30]
[1, 2, 3].map do |n|
n * 10
end # [10, 20, 30]التحدي
سهلاقرأ قائمة من الأعداد الصحيحة المفصولة بفاصلة من الإدخال. اطبع سطرين:
- كل رقم مضاعفاً، ومدمجاً بـ
,. استخدم صيغة الأقواس (brace) لـmap. - السلسلة النصية
"<n> squared is <n*n>"لكل رقم، كل واحد في سطر. استخدم صيغةdo...endلـeach.
للإدخال 1,2,3، يكون المخرج:
2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9ورقة مرجعية
تحتوي كتل Ruby على صيغتين:
الأقواس المتعرجة { ... } للكتل المكونة من سطر واحد:
[1, 2, 3].map { |n| n * 2 } # [2, 4, 6]do...end للكتل متعددة الأسطر:
[1, 2, 3].each do |n|
doubled = n * 2
puts "#{n} -> #{doubled}"
endكلتا الصيغتين تعيدان التعبير الأخير في الكتلة (تستخدمها دوال مثل map).
جرّب بنفسك
numbers = gets.chomp.split(",").map(&:to_i)
# مهمة: السطر 1، مضاعف، صيغة الأقواس لـ map، مدمج بـ ", "
# مهمة: الأسطر 2..n، مربعات، صيغة do...end لـ each
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق العمليات
1السلاسل النصية بعمق
نظرة عامة على دوال السلاسل النصيةتضمين النصوص (String Interpolation)التكرار عبر السلاسل النصيةالتقسيم والربط (Split و Join)مراجعة - نساج النصوص4Blocks و Procs و Lambdas
ما هو الـ Block؟do..end مقابل الأقواس { }الكلمة المفتاحية yieldمعاملات الـ BlockProcs و Lambdasمراجعة - Custom Iterator مخصص7Hashes - الجزء الثاني
Hash.new مع القيم الافتراضيةالتكرار عبر الـ Hashesالـ Hashes المتداخلةالدمج والتحويلمراجعة - عداد التكرار10مشروع - سجلات الطلاب
نظرة عامة على المشروعإضافة طالب5قوة الـ Enumerable
Select و Rejectتسلسل MapReduce / Injectcount، all?، any?، none?group_by و partitionsort_by، min_by، max_byمراجعة - Data Pipeline