وظائف ذات ترتيب أعلى
تسمح وظائف الترتيب الأعلى بأن يكون JavaScript مناسبًا لـfunctional programming. تستخدم هذه الوظائف على نطاق واسع في JavaScript. إذا كنت قد قمت ببرمجتها في JavaScript ولو قليلاً ، فمن المحتمل أنك استخدمتها ، ربما دون أن تدرك ذلك.
لفهم هذا المفهوم تمامًا ، يجب أولاً فهم البرمجة الوظيفية ومفهوم وظائف الدرجة الأولى.
ما هي البرمجة الوظيفية؟
البرمجة الوظيفية هي فرع من الرياضيات المنفصلة ونموذج البرمجة ، حيث يتم تفسير عملية الحساب على أنها حساب قيم الوظائف بالمعنى الرياضي للأخير (على عكس الوظائف مثل الإجراءات الفرعية في البرمجة الإجرائية). [Wikipedia]
وظائف من الدرجة الأولى
إذا كنت تتعلم JavaScript بالفعل ، فربما تكون قد سمعت أن JavaScript يعامل الدوال ⚙️ ككائنات من الدرجة الأولى. الوظائف في JavaScript هي كائنات ، تمامًا كما هو الحال في لغات البرمجة الوظيفية الأخرى.
في JavaScript ، تعتبر الوظائف نوعًا خاصًا من الكائنات. هؤلاء هم Function
شاء. على سبيل المثال:
نحن نعرف الآن ما هي وظائف الدرجة الأولى. يمكنك البدء بوظائف ذات ترتيب أعلى.
وظائف ذات ترتيب أعلى
هذه هي الدوال - التي تأخذ دالة - كوسيطة أو عودة دالة كإخراج.
على سبيل المثال ، تم تضمين هذه الوظائف ذات الترتيب الأعلى في اللغة:map()
filter()
وreduce()
###مثال رقم 1. قم بتغيير الأرقام ". دفع"
لنفترض أن لدينا مجموعة من الأرقام. نريد إنشاء ملف المصفوفة التي ستحتوي على القيم المضاعفة لأول واحد. دعونا نرى كيف يمكننا حل هذه المشكلة باستخدام دالة الترتيب الأعلى وبدونها.
بدون وظيفة ترتيب أعلى:
مع وظيفة الترتيب الأعلى map
, خيار وحدة التحكم هو:
يمكننا كتابتها بشكل أقصر باستخدام صيغة "وظيفة السهم":
مثال# 2. القيم المحسوبة "خريطة"
لنفترض أن لدينا مصفوفة تحتوي على سنوات ميلاد أشخاص مختلفين. نحتاج إلى إنشاء مصفوفة تخزن أعمارهم.
على سبيل المثال: بدون وظيفة ذات ترتيب أعلى (كلاسيكي - من خلالfor()
and push()
الحلقات)
مع وظيفة الترتيب الأعلى map
:
نحن نعيد تحميل ملفات مجموعة جديدة في سطر واحد من التعليمات البرمجية.
مثال رقم 3. بفحص الشرط "()`
لدينا مصفوفة تحتوي على كائنات ذات خصائص: الاسم والعمر. نحتاج إلى إنشاء - مصفوفة تحتوي فقط على البالغين (أي عمر أكبر من أو يساوي 18).
بدون وظيفة ذات ترتيب أعلى (كلاسيكية - من خلالfor ()
and push ()
الحلقات):
مع وظيفة ذات ترتيب أعلى filter
بشرط مدمج:
إنشاء دالة الترتيب الأعلى الخاصة بك
حتى الآن ، نظرنا في الوظائف ذات الترتيب الأعلى المضمنة في اللغة. الآن دعونا ننشئ مثل هذه الوظيفة بأنفسنا
⚙️.
تخيل أن JavaScript لا يحتوي على ملفmap
طريقة. يمكننا كتابتها بأنفسنا عن طريق إنشاء دالة ذات رتبة أعلى.
لنفترض أن لدينا مصفوفة سلسلة نصية ونريد تحويلها إلى مصفوفة من الأرقام ، حيث يمثل كل عنصر طول العناصر من المصفوفة الأصلية.
في المثال أعلاه ، أنشأنا وظيفة الترتيب الأعلى الخاصة بنا mapFor()
, الذي يأخذ مجموعة arr
ووظيفة رد الاتصالfn
. تتكرر هذه الوظيفة عبر هذه المجموعة وتستدعي وظيفة رد الاتصالfn
داخل newArray.push()
لكل تكرار ، حساب عدد الأحرف في كلمات المصفوفة ، يتم وصف خوارزمية الحساب الخاصة بها في شكل المتغير الثاني .
::: إعادة الاتصال علما وظيفة رد الاتصال هي وظيفة يتم تمريرها إلى وظيفة أخرى كوسيطة ، والتي يتم استدعاؤها بعد ذلك عند الانتهاء من إجراء ما.
:::
ال callback
وظيفة⚙️ fn
يأخذ العنصر الحالي من المصفوفة ويعود طول العنصر الحالي الذي تم تخزينه الآن فيnewArray
. بعدFor()
الحلقة تكتمل ، newArray
إرجاع طول العناصر في lenArray
.
تذكر أن أي خوارزمية ، مهما كانت صغيرة ، تتكون من 3 مراحل:
- المرحلة 1 - تهيئة المتغيرات والوظائف
- المرحلة 2 - وظيفة الرتبة الأعلى (المنطق)
- المرحلة 3 - اختتام الجواب.
استنتاج
لقد تعلمنا ما هي الوظائف ذات الترتيب الأعلى وألقينا نظرة على العديد منها المضمنة بالفعل في اللغة . تعلمنا أن نخلقها بأنفسنا.
دون الخوض في التفاصيل ، وظائف ذات ترتيب أعلى⚙️ يمكن أن يقال على النحو التالي: هذه هي الوظائف⚙️ يمكن أن تأخذ دالة كوسيطة وحتى إرجاع دالة⚙️.
مشاكل؟
Write to Discord chat.
أسئلة:
وظائف الدرجة الأولى:
- مرافق من الدرجة الأولى
- مرافق من الدرجة الخامسة
- مرافق من الدرجة الأولى
وظيفة الترتيب الأعلى:
- تأخذ دالة كوسيطة أو تُرجع دالة كإخراج
- تأخذ وظيفة كوسيطة فقط
- إرجاع دالة فقط كناتج
وظيفة الترتيب الأعلى:
- من غير الواقعي أن تصنع نفسك
- يمكن استخدامها فقط من خلال طريقة مضمنة
- يمكنك إنشاء نفسك
لفهم مقدار ما تعلمته في هذا الدرس ، قم بإجراء الاختبار في mobile application من مدرستنا في هذا الموضوع.
الروابط:
- Exploring Higher-Order Functions in JavaScript
- Article "Higher-order functions in JavaScript"
- Expressive Javascript. Article "Higher-order functions"
- Code for Teens: The Perfect Beginner's Guide to Programming, Volume 1: Javascript - Jeremy Moritz
المساهمون✨
الشكر يعود إلى هؤلاء الأشخاص الرائعين (emoji key):
Dmitriy K. | Dmitriy Vasilev 💵 | Resoner2005 🐛 🎨 🖋 | Navernoss 🖋 🐛 🎨 |