Ruby Programming

إتقان أدوات التكرار القوية في روبي: Each و Collect

Spread the love

تُبرز أناقة روبي غالبًا من خلال طرق التكرار القوية. ومن أبرز هاتين الطريقتين، each و collect (المعروفة أيضًا باسم map)، أساسيتان لمعالجة المجموعات. إن فهم نقاط قوتهما وكيفية دمجهما يحسّن بشكل كبير من كفاءة وقابلية قراءة شفرة روبي.

محتويات

  1. فهم طريقة each
  2. استكشاف طريقة collect (map)
  3. دمج each و collect
  4. تقنيات تكرار متقدمة
  5. خاتمة
  6. الأسئلة الشائعة

فهم طريقة each

طريقة each هي حجر الزاوية في تكرار روبي. فهي تتكرر عبر كل عنصر في مصفوفة، أو جدول بيانات، أو أي كائن قابل للعد، وتنفذ كتلة من التعليمات البرمجية لكل عنصر. تُستخدم بشكل أساسي للآثار الجانبية — الإجراءات التي تُعدّل شيئًا ما خارج نطاق طريقة each — فهي لا تُغيّر المجموعة الأصلية بشكلٍ جوهري.


numbers = [1, 2, 3, 4, 5]

numbers.each do |number|
  puts number * 2  # يطبع كل رقم مضروبًا في 2
end

# الإخراج:
# 2
# 4
# 6
# 8
# 10

هنا، تتكرر each، وتطبع الكتلة كل رقم مضاعف. تظل مصفوفة numbers دون تغيير.

استكشاف طريقة collect (map)

على عكس each، تُغيّر collect (أو map — هما اسمان مستعاران) المجموعة، حيث تُعيد مصفوفة جديدة تحتوي على نتائج تطبيق كتلة على كل عنصر. إنها مثالية لإنشاء مجموعات بيانات مُعدّلة.


numbers = [1, 2, 3, 4, 5]

squared_numbers = numbers.collect do |number|
  number * number # تربيع كل رقم
end

puts squared_numbers  # يطبع [1, 4, 9, 16, 25]
puts numbers         # يطبع [1, 2, 3, 4, 5] - المصفوفة الأصلية لم تتغير

تُنشئ collect مصفوفة squared_numbers؛ وتبقى مصفوفة numbers الأصلية دون تغيير.

دمج each و collect

تُبرز قوة each و collect حقًا عند استخدامهما معًا. يمكنك الاستفادة من each للآثار الجانبية بينما تُغيّر collect البيانات.


numbers = [1, 2, 3, 4, 5]

squared_numbers = numbers.collect do |number|
  puts "جاري المعالجة: #{number}" # تأثير جانبي
  number * number
end

puts squared_numbers # يطبع [1, 4, 9, 16, 25]

هذا يجمع بين التحويل والتسجيل داخل كتلة collect.

تقنيات تكرار متقدمة

بالإضافة إلى الاستخدام الأساسي، استكشف طرقًا مثل inject/reduce لمزيد من التجميعات والتحويلات المعقدة. هذه توفر نهجًا بديلة لمعالجة المجموعات، مما يوفر مرونة تتجاوز العمليات على كل عنصر.

خاتمة

each و collect أساسيتان لأي مطور روبي. إن فهم استخداماتهما، بشكل منفرد أو مجتمعة، يحسن بشكل كبير من وضوح الشفرة، وكفاءتها، وقابلية صيانتها. يعتمد الاختيار على ما إذا كنت بحاجة إلى تعديل المجموعة الأصلية أو ببساطة تنفيذ إجراءات على كل عنصر.

الأسئلة الشائعة

  • س: ما هو الفرق بين collect و map؟ ج: هما اسمان مستعاران؛ متطابقان وظيفيًا. غالبًا ما يُفضل map لقابلية القراءة.
  • س: هل يمكن لـ each أن تُعيد قيمة؟ ج: each تُعيد دائمًا المجموعة الأصلية. هدفها هو الآثار الجانبية.
  • س: هل يمكنني استخدام each مع الجداول؟ ج: نعم. my_hash.each { |key, value| puts "#{key}: #{value}" }
  • س: هل هناك بدائل لـ collect؟ ج: نعم، inject/reduce، لكن collect/map تظل أبسط طريقة للتحويلات على كل عنصر.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *