0Pricing
Dart Academy · درس

‏fold وreduce وexpand

تجميع القيم القابلة للتكرار وتسطيحها

‏fold وreduce وexpand درس مجاني في Dart Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Dart Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Dart Academy 4 دروس في المجموع.

تجميع مجموعة

غالبًا ما تريد اختزال قائمة كاملة إلى قيمة واحدة، مثل المجموع أو القيمة العظمى. يوفر لك Dart الدالتين fold وreduce لهذا الغرض تحديدًا. 🧮

تعرّف إلى reduce

تجمع reduce العناصر زوجيًا باستخدام دالتك. وتبدأ بالعنصر الأول، لذلك يجب ألا تكون القائمة فارغة.

var sum = [1, 2, 3, 4].reduce((a, b) => a + b);
print(sum); // 10

تحمل reduce النتيجة

تستلم كل خطوة النتيجة المتراكمة والعنصر التالي. فكّر في a باعتباره المجمّع الذي ينمو مع التقدم.

var max = [3, 9, 2].reduce((a, b) => a > b ? a : b);
print(max); // 9

مشكلة القائمة الفارغة

يؤدي استدعاء reduce على قائمة فارغة إلى طرح StateError. عندما يُحتمل أن تكون القائمة فارغة، استخدم fold بدلًا منه.

تعرّف إلى fold

يشبه fold reduce، لكنك تمنحه قيمة ابتدائية. تحدد هذه القيمة نوع النتيجة وتعالج القوائم الفارغة بأمان.

var total = [1, 2, 3].fold(0, (a, b) => a + b);
print(total); // 6

يمكن لـ fold تغيير النوع

لأن القيمة الابتدائية تحدد النوع، يستطيع fold تحويل قائمة من int إلى String أو Map أو أي نوع تحتاج إليه.

var joined = [1, 2, 3].fold('', (a, b) => '$a$b');
print(joined); // 123

استخدام fold مع قائمة فارغة آمن

مع القائمة الفارغة، يعيد fold القيمة الابتدائية ببساطة. لا تعطل ولا حالة خاصة يلزم تذكرها.

var s = <int>[].fold(0, (a, b) => a + b);
print(s); // 0

reduce مقارنةً بـ fold

استخدم reduce للدمج السريع من النوع نفسه في قائمة غير فارغة. واستخدم fold عندما تحتاج إلى قيمة ابتدائية أو نوع نتيجة جديد.

تعرّف إلى expand

تطابق expand كل عنصر مع iterable، ثم تسطحها جميعًا في تدفق واحد من القيم. إنها map مضافًا إليها flatten.

var r = [1, 2].expand((n) => [n, n * 10]);
print(r.toList()); // [1, 10, 2, 20]

تسطيح القوائم المتداخلة

من الاستخدامات الشائعة لـ expand تسطيح قائمة من القوائم إلى قائمة مسطحة واحدة باستدعاء واضح واحد.

var flat = [[1, 2], [3, 4]].expand((x) => x);
print(flat.toList()); // [1, 2, 3, 4]

تسلسل الدوال الثلاث

تتركب هذه الأساليب بانسجام كبير. يمكنك استخدام expand للتسطيح، ثم fold للتجميع، ضمن خط معالجة واحد سهل القراءة.

var t = [[1, 2], [3]].expand((x) => x).fold(0, (a, b) => a + b);
print(t); // 6

تحقق سريع

اختر الأداة المناسبة لحساب مجموع آمن مع القوائم الفارغة.

مراجعة

تجمع reduce العناصر، ويجمع fold العناصر مع قيمة ابتدائية، بينما يعمل expand على التسطيح. وباجتماعها، تجمع أي مجموعة بسهولة. 🎉

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

هل درس «‏fold وreduce وexpand» مجاني؟

نعم — نص درس «‏fold وreduce وexpand» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Dart Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Dart Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏fold وreduce وexpand»؟

تجميع القيم القابلة للتكرار وتسطيحها تتمرن على Dart Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Dart Academy؟

لا تُشترط خبرة سابقة. Dart Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «‏fold وreduce وexpand»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Dart Academy هذا؟

نعم. كل درس في Dart Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الدوال من الدرجة الأعلى والكاريّنة
  2. ‏fold وreduce وexpand
  3. القيم القابلة للتكرار والمولّدات الكسولة باستخدام sync*
  4. تركيب مسارات الدوال النقية
← العودة إلى Dart Academy