Menu
CoddyTech
flag Ar iconالعربيةdown icon

الطريقة reduce

جزء من قسم المنطق وتدفّق التنفيذ في رحلة GDScript على Coddy. الدرس 62 من 78.

تجمع reduce() كل عناصر المصفوفة في قيمة واحدة: مجموع، أو حاصل ضرب، أو أكبر عنصر، أو جملة.

var numbers = [1, 2, 3, 4]
var total = numbers.reduce(func(acc, n): return acc + n, 0)
print(total)
10

يأخذ وسيطين: دالة وقيمة بداية، وهي هنا 0. تستقبل الدالة النتيجة حتى الآن، وتُسمّى المُراكِم (acc)، والعنصر التالي. وما تُعيده يصبح المُراكِم الجديد:

  • تبدأ قيمة acc عند 0
  • 0 + 1 تساوي 1، و1 + 2 تساوي 3، و3 + 3 تساوي 6، و6 + 4 تساوي 10
  • بعد العنصر الأخير، تُعيد reduce() المُراكِم: 10

بالنسبة إلى حاصل الضرب، ابدأ من 1: numbers.reduce(func(acc, n): return acc * n, 1) يساوي 24.

من دون قيمة ابتدائية، يكون العنصر الأول هو نقطة البداية، وتُنفَّذ الدالة بدءًا من العنصر الثاني. وهذا مناسب للعثور على أكبر عنصر:

var biggest = [4, 9, 2].reduce(func(a, b): return a if a > b else b)
print(biggest) # 9

في مصفوفة فارغة من دون قيمة ابتدائية، تُرجع reduce() القيمة null، لذا حدّد قيمة ابتدائية عندما تكون المصفوفة فارغة.

يمكن أن يكون للمُراكِم أي نوع. باستخدام قيمة بداية ""، يُنشئ هذا سلسلةً من الأحرف الأولى:

var words = ["game", "over"]
print(words.reduce(func(acc, w): return acc + w[0], "")) # go
challenge icon

التحدي

سهل

يقرأ البرنامج سطرًا واحدًا من الأعداد الكلية المفصولة بفواصل، ويخزنها في المصفوفة numbers. هذا الجزء مكتوب مسبقًا.

استخدم reduce() لكل عملية منها، واطبع ثلاثة أسطر:

  1. مجموع الأعداد
  2. حاصل ضربها
  3. أكبر عدد (اكتب المقارنة داخل دالة lambda؛ لا تستدعِ max())

يوجد دائمًا عدد واحد على الأقل. بالنسبة إلى الإدخال 3,7,2,8,4، يكون الناتج:

24
1344
8

جرّب بنفسك

extends Node

func _ready():
	var numbers := []
	for part in OS.read_string_from_stdin().split(","):
		numbers.append(int(part))
	# اطبع المجموع وحاصل الضرب والعدد الأكبر، كلًّا منها باستخدام reduce()
quiz iconاختبر نفسك

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

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

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