مقدمة سريعة عن وظائف الترتيب الأعلى في JavaScript

وظائف ذات ترتيب أعلى

الوظيفة التي تقبل و / أو ترجع دالة أخرى تسمى دالة ذات ترتيب أعلى .

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

مع الوظائف في JavaScript ، يمكنك ذلك

  • قم بتخزينها كمتغيرات
  • استخدمها في المصفوفات
  • قم بتعيينها كخصائص كائن (طرق)
  • قم بتمريرها كحجج
  • إعادتهم من وظائف أخرى

مثل أي جزء آخر من البيانات . هذا هو المفتاح هنا.

تعمل الوظائف على البيانات

السلاسل هي بيانات

sayHi = (name) => `Hi, ${name}!`; result = sayHi('User'); console.log(result); // 'Hi, User!' 

الأرقام هي بيانات

double = (x) => x * 2; result = double(4); console.log(result); // 8 

القيم المنطقية هي بيانات

getClearance = (allowed) => (allowed ? 'Access granted' : 'Access denied'); result1 = getClearance(true); result2 = getClearance(false); console.log(result1); // 'Access granted' console.log(result2); // 'Access denied' 

الكائنات هي بيانات

getFirstName = (obj) => obj.firstName; result = getFirstName({ firstName: 'Yazeed' }); console.log(result); // 'Yazeed' 

المصفوفات هي بيانات

len = (array) => array.length; result = len([1, 2, 3]); console.log(result); // 3 

هؤلاء الخمسة هم مواطنون من الدرجة الأولى في كل لغة سائدة.

ما الذي يجعلهم من الدرجة الأولى؟ يمكنك تمريرها وتخزينها في متغيرات ومصفوفات واستخدامها كمدخلات للحسابات. يمكنك استخدامها مثل أي جزء من البيانات .

يمكن أن تكون الوظائف بيانات أيضًا

وظائف الحجج

isEven = (num) => num % 2 === 0; result = [1, 2, 3, 4].filter(isEven); console.log(result); // [2, 4] 

انظر كيف filterيستخدم isEvenلتحديد ما هي الأرقام للاحتفاظ بها؟ isEven، وظيفة ، كانت معلمة لوظيفة أخرى .

يتم استدعاؤه بواسطة filterلكل رقم ، ويستخدم القيمة التي تم إرجاعها trueأو falseلتحديد ما إذا كان يجب الاحتفاظ برقم أو تجاهله.

عودة الوظائف

add = (x) => (y) => x + y; 

addيتطلب معلمتين ، ولكن ليس كلها مرة واحدة. إنها دالة تطلب فقط x، وتعيد دالة تطلب فقط y.

مرة أخرى ، هذا ممكن فقط لأن JavaScript يسمح للوظائف بأن تكون قيمة مرتجعة - تمامًا مثل السلاسل والأرقام والمنطق المنطقي وما إلى ذلك.

لا يزال بإمكانك تزويد xو yعلى الفور، إذا كنت ترغب في ذلك، مع الاحتجاج مزدوج

result = add(10)(20); 
console.log(result); // 30 

أو xالآن وبعد yذلك:

add10 = add(10); result = add10(20); console.log(result); // 30 

دعنا نعيد هذا المثال الأخير. add10هي نتيجة استدعاء addبمعامل واحد. حاول تسجيله في وحدة التحكم.

add10هي دالة تأخذ a yوترجع x + y. بعد أن تقوم بالتزويد y، فإنه يتعجل حساب النتيجة النهائية وإرجاعها.

إعادة استخدام أكبر

ربما تكون أكبر فائدة لـ HOFs هي قابلية إعادة الاستخدام الأكبر. بدونها، وأساليب العرض صفيف جافا سكريبت -  map، filterو reduce - لن وجود له!

هذه قائمة بالمستخدمين. سنقوم ببعض الحسابات بمعلوماتهم.

users = [ { name: 'Yazeed', age: 25 }, { name: 'Sam', age: 30 }, { name: 'Bill', age: 20 } ]; 

خريطة

بدون وظائف ذات ترتيب أعلى ، سنحتاج دائمًا إلى حلقات لتقليد mapوظيفة.

getName = (user) => user.name; usernames = []; for (let i = 0; i < users.length; i++) { const name = getName(users[i]); usernames.push(name); } console.log(usernames); // ["Yazeed", "Sam", "Bill"] 

أو يمكننا فعل هذا!

usernames = users.map(getName); console.log(usernames); // ["Yazeed", "Sam", "Bill"] 

منقي

في عالم خالٍ من HOF ، ما زلنا بحاجة إلى حلقات لإعادة إنشاء filterوظيفة أيضًا.

startsWithB = (string) => string.toLowerCase().startsWith('b'); namesStartingWithB = []; for (let i = 0; i < users.length; i++) { if (startsWithB(users[i].name)) { namesStartingWithB.push(users[i]); } } console.log(namesStartingWithB); // [{ "name": "Bill", "age": 20 }] 

أو يمكننا فعل هذا!

namesStartingWithB = users.filter((user) => startsWithB(user.name)); console.log(namesStartingWithB); // [{ "name": "Bill", "age": 20 }] 

خفض

نعم ، قلل أيضًا ... لا يمكنك القيام بالكثير من الأشياء الرائعة بدون وظائف ذات ترتيب أعلى !! ؟

total = 0; for (let i = 0; i < users.length; i++) { total += users[i].age; } console.log(total); // 75 

كيف هذا؟

totalAge = users.reduce((total, user) => user.age + total, 0); console.log(totalAge); // 75 

ملخص

  • يمكن تخزين السلاسل والأرقام والنقاط المنطقية والمصفوفات والكائنات كمتغيرات ومصفوفات وخصائص أو طرق.
  • يعامل JavaScript الوظائف بنفس الطريقة.
  • يسمح هذا للوظائف التي تعمل على وظائف أخرى: وظائف الترتيب الأعلى .
  • تعد الخريطة والتصفية والتقليل أمثلة رئيسية - وتجعل الأنماط الشائعة مثل قوائم التحويل والبحث والتلخيص أسهل بكثير!

أنا على Twitter إذا كنت ترغب في التحدث. حتى المرة القادمة!

اعتن بنفسك،

يزيد بزادوغ

yazeedb.com