كيفية كتابة وظيفة الأنابيب الخاصة بك في JS

جافا سكريبت ديناميكية للغاية بحيث يمكننا اختيار العديد من الطرق لكتابة التعليمات البرمجية لدينا. لماذا لا تفعل ذلك طريقة البرمجة الوظيفية؟

ما هي وظيفة الأنابيب؟

هل تتذكر في المدرسة الثانوية ، في فصل الرياضيات ، أن لديك وظيفتين -
f (x) و g (x).
ثم يمكنك إنشاء وظيفة جديدة:
h (x) = f (g (x)).

تقبل الوظيفة الجديدة وسيطة وتمرر تلك الوسيطة g (x) ثم تقوم بتمرير القيمة المقيمة إلى الدالة التالية = f (g).

لذلك ، فإن الأنابيب الوظيفية هي الفكرة الأساسية نفسها ، فأنت تقوم بإنشاء وظيفة جديدة "تمرر" عبر عدة وظائف أصغر.

الكتابة نقية

في العالم الوظيفي نحن نحب كتابة وظائف نقية.

تعتبر الوظيفة نقية إذا:
1. يحصل على جميع المعلمات التي يحتاجها (لا يستخدم أي متغيرات عمومية أو أعضاء فئة)
2. دائما إرجاع نفس الإخراج لإدخال معين
3. ليس له أي تأثير جانبي (استدعاء الخادم ، جلب db ، عرض DOM ، إلخ)

وظائف نقية لديها العديد من المزايا:
1. إنه قابل للاختبار! لا مزيد من الإعداد أو الكتابة الصف وهمية
2. إنها قادرة على التخزين المؤقت ، وهذه الوظيفة محددة ، فلماذا تحسب نفس المدخلات أكثر من مرة؟
هناك نمط بارد يسمى memoize ، يرجى التحقق من ذلك.

والميزة التي نحن هنا من أجلها هي:
3. إنه قادر على التأليف! يمكنك توجيه العديد من الوظائف كما تريد لإنشاء وظيفة أكثر تعقيدًا (أو حتى ميزة بأكملها).

وظيفة الحد

نظرًا لأننا سننشئ وظيفة توجيه الإخراج استنادًا إلى "Array.reduce ()" ، فسأوضح ذلك قريبًا.

سوف يقلل () العناصر في الصفيف ، ويعالجها ويعيد عنصرًا واحدًا. هذا العنصر الواحد يمكن أن يكون أي شيء ، حتى وظيفة كما سنرى في القسم التالي.

// مجموع وظيفة ، ويحصل على مجموعة وإرجاع المبلغ
// نمط es5 ، مابي انها أكثر وضوحا
الدالة sum_es5 (arr) {
   arr.reduce (دالة (acc ، curr) {
      عودة acc + curr
   } ، 0
}
// نفس الوظيفة مكتوبة في es6
const المبلغ = arr =>
  arr.reduce ((acc، curr) => acc + curr، 0)
const mul = arr =>
  arr.reduce ((acc، curr) => acc * curr، 1)
المبلغ ([1،2،3]) // 6
مول ([2،3،4]) // 24

دعنا نقسمها.
تحصل وظيفة المخفض على وسيطين:

أول
دالة ، هذه الوظيفة نفسها تحصل على وسيطين ، وراكم ، والقيمة الحالية. يحتوي الأول على القيمة الإجمالية التي تم حسابها حتى الآن. الثاني ، هو العنصر الحالي في صفيفنا.

ثانيا
القيمة الأولية. سيتم تهيئة المُراكم بهذه القيمة.

لذا أصبح من السهل الآن فهم وظيفة Sum.
القيمة الأولية هي 0 ، بالطبع ، وكل تكرار نرجع مجموع القيمة الإجمالية حتى الآن وعنصر المصفوفة الحالي.

إنشاء وظيفة الأنابيب

التعامل مع أكثر من وسيطة

كما رأينا في وظيفة توجيه الإخراج ، فإننا نتعامل جيدًا مع الوسائط المتعددة التي تم تمريرها إلى وظيفتنا الأولى.

ماذا عن وظيفة الوسائط المتعددة التي ليست الوظيفة الأولى؟
هناك نمط تصميم جميل في العالم الوظيفي يسمى الكاري ، يساعدنا في حل هذه المشكلة. سأغطيها في مقال آخر.