هذا هو الجزء الثاني من سلسلة مقالاتنا المخصصة لقوة البرمجة الوظيفية في JavaScript. راجع هذه المقالة لتوسيع معرفتك عن المدمجات.
مقدمة في المجمّعات
المدمجات هي دالة ذات مستوى أعلى تسمح لك بدمج الدوال أو المتغيرات أو المدمجات الأخرى. عادةً لا تحتوي على تعريفات للمتغيرات الخاصة بها أو منطق العمل. هم الوحيدون الذين يقومون بمسح عنصر التحكم في برنامج الدالة.
سأحاول في هذا المقال تغطية بعض منها:
الحنفية
الكاري
الأنابيب/التركيب
شوكة
التناوب
التسلسل
الحنفية
المُدمج مفيد جدًا للدوال التي لا تُعيد شيئًا. فهي تأخذ الدالة التي تذهب إليها المعلمة ثم يتم إرجاعها.
تشكل [العناصر، مجموعة العناصر] = حالة الاستخدام()() => [])
أكسيوس
.get('http://localhost')
.then({ data } => {
setItems(البيانات)
console.log(data)
onLoadData(البيانات)
.})).ثم(...) // إرجاع غير معرّف - تم تعديل البيانات الموجودة في الوعد
مثال توضيحي
تشكل [العناصر، مجموعة العناصر] = حالة الاستخدام()() => [])
أكسيوس
.get('http://localhost')
.ثم(({البيانات })) => البيانات)
.ثم (اضغط (setItems))) // (البيانات) => { setItems(البيانات)؛ إرجاع البيانات }.
.then(tap(console.log))) // واحد ثم = دالة واحدة = مسؤولية واحدة
.ثم(صنبور(onLoadData))
.ثم(...) // لا يزال الوصول إلى البيانات الأصلية
// من السهل الحفاظ على مبدأ الفتح/الإغلاق
الكاري
يقسم وسيطات الدالة ويجعل من الممكن استدعاؤها بالتتابع.
المجموع = (أ، ب، ج) => أ + ب + ج) => أ + ب + ج
const currySum = كاري(مجموع)
/*
المكالمات الممكنة
مجموع الكاري(أ)(ب)(ج),
مجموع الكاري(أ)(ب، ج),
مجموع الكاري(أ، ب)(ج),
مجموع الكاري (أ، ب، ج)
*/
مجموع الكاري(1) (1) // (ب، ج) => 1 + أ + ب أو (ب) => (ج) => 1 + أ + ب
مجموع الكاري(5)(10)(10) // (ج) => 5 + 10 + ب
مجموع الكاري (5، 10) // (ج) => 5 + 10 + ب + 10 + ب
مجموع الكاري(5)(10)(20) // (ج) // 35
مجموع الكاري(5، 10)(20) // (ج) => 5 + 10 (ب)(20) // 35
مجموع الكاري(5)(5)(10، 20) // 35
const divideBy = كاري((a, b) => b / a)
const multipleBy = كاري((a, b) => a * b)
const divideByTwo = divideBy(2)
قسمة باي اثنين(10) // يُرجع 5
يشكل multipeByFive = multipeByBy(5)
مضروب في خمسة(10) // الإرجاع 50
الأنابيب/التركيب
من خلال التركيب، من الممكن تمرير البيانات من دالة إلى أخرى. من المهم أن تأخذ الدوال نفس عدد الوُسطاء. الفرق بين الأنبوب والتركيب هو أن الأول يستدعي الدالة من أولها إلى آخرها، أما التركيب فيستدعيها من النهاية.