Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

Reduce / Inject

جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy. الدرس 23 من 56.

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

يأخذ المقطع (block) معاملين: المجمع (accumulator) والعنصر الحالي. وتصبح القيمة المرجعة للمقطع هي المجمع التالي.

total = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts total   # 10

خطوة بخطوة، المجمع (accumulator) هو 0 → 1 → 3 → 6 → 10.

المعامل الأول هو القيمة الابتدائية للمراكم (accumulator). إذا تركته، ستستخدم Ruby العنصر الأول من المصفوفة:

[1, 2, 3, 4].reduce { |acc, n| acc * n }   # 24

بالنسبة للعمليات البسيطة مثل المجموع والضرب، توفر لك Ruby اختصاراً، وهو تمرير رمز (symbol) بدلاً من كتلة برمجية (block):

[1, 2, 3, 4].reduce(:+)   # 10
[1, 2, 3, 4].reduce(:*)   # 24

بمجرد أن تتمكن من بناء مجمع مخصص (accumulator)، يمكنك حساب أي شيء تقريبًا في تمريرة واحدة.

challenge icon

التحدي

سهل

اقرأ قائمة من الأعداد الصحيحة المفصولة بفاصلة. اطبع ثلاثة أسطر:

  1. المجموع (استخدم reduce(:+))
  2. حاصل الضرب (استخدم reduce(:*))
  3. الحد الأقصى، محسوبًا باستخدام reduce وكتلة برمجية (block) صريحة، وليس باستخدام max.

للمدخلات 2,5,3,8، المخرجات هي:

18
240
8

جرّب بنفسك

numbers = gets.chomp.split(",").map(&:to_i)

# مهام: طباعة المجموع، والناتج، والحد الأقصى (باستخدام reduce + كتلة برمجية صريحة)
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق العمليات

تدرّب بنفسك: مترجم Ruby عبر الإنترنت