تعرف على مدى مرونة وظائف JavaScript وكيف يمكنك استخدامها لإنشاء تعليمات برمجية مرنة وقابلة لإعادة الاستخدام.
جافا سكريبت لغة قوية تدعمها معظم المتصفحات الحديثة ، وهي خيار رائع للمبتدئين.
تمامًا مثل العديد من لغات البرمجة الحديثة الأخرى ، تدعم JavaScript الوظائف التي تتيح لك عزل كتلة من التعليمات البرمجية وإعادة استخدامها في مكان آخر. يمكنك أيضًا استخدام وظائف تعيين للمتغيرات وتمريرها كمعلمات ، مثل القيم الأخرى.
ما هي وظائف الرتبة العليا؟
إن أبسط تعريف لوظيفة ذات ترتيب أعلى هو الوظيفة التي تؤدي عمليات على وظائف أخرى بقبولها كمعلمات أو إعادتها. يتم استخدام وظائف الترتيب الأعلى بكثرة في ملف نموذج البرمجة الوظيفية. إذا كنت كذلك بدأت للتو مع JavaScript، قد يكون من الصعب بعض الشيء استيعاب وظائف الترتيب الأعلى.
خذ بعين الاعتبار المثال التالي:
وظيفةتحول(الجبهة الوطنية) {
يترك resultArray = [] ،يعودوظيفة (مجموعة مصفوفة) {
ل (يترك أنا = 0; أنا أنا ++) {
resultArray.push (fn (array [i]))
}
يعود النتيجة
}
}
في كتلة التعليمات البرمجية أعلاه ، ملف تحول الوظيفة هي وظيفة ذات ترتيب أعلى تأخذ الامتداد الجبهة الوطنية تعمل كمعامل وتعيد دالة مجهولة تأخذها مجموعة مصفوفة كمعامل.
الغرض من تحول الوظيفة هي تعديل العناصر في المصفوفة. أولا ، الكود يعرّف متغير النتيجة ويربطها بمصفوفة فارغة.
ال تحول تُرجع الدالة دالة مجهولة تتكرر عبر كل عنصر في مجموعة مصفوفة، ثم يمرر العنصر إلى الجبهة الوطنية وظيفة للحساب ، ودفع النتيجة إلى النتيجة. بعد الانتهاء من الحلقة ، تقوم الوظيفة المجهولة بإرجاع ملف النتيجة.
مقدار ثابت الوظيفة 1 = تحويل ((x) => س * 2)
وحدة التحكم.log (function1 ([ 2, 3, 4, 5, 6 ])) /* [ 4, 6, 8, 10, 12] */
تقوم كتلة التعليمات البرمجية أعلاه بتعيين الوظيفة المجهولة التي يتم إرجاعها بواسطة تحول وظيفة للمتغير الثابت وظيفة 1. الجبهة الوطنية إرجاع منتج x وهو بديل عن مجموعة [i].
يقوم الكود أيضًا بتمرير مصفوفة ، كمعامل لـ وظيفة 1 ومن ثم تسجيل النتيجة إلى وحدة التحكم. الطريقة الأقصر لكتابة هذا ستكون:
وحدة التحكم.log (تحويل ((x) => س * 2)([ 2, 3, 4, 5, 6 ]))
تحتوي JavaScript على وظيفة مضمنة ذات ترتيب أعلى تؤدي في الأساس نفس الشيء مثل تحول، والتي سنغطيها لاحقًا.
نأمل أن تكون قد بدأت في فهم كيفية عمل الوظائف ذات الترتيب الأعلى في JavaScript. ألق نظرة على الوظيفة التالية ومعرفة ما إذا كان يمكنك تخمين ما تفعله.
وظيفةالتصفية والتحويل(fn ، arrayToBeFiltered ، الشرط) {
يترك filteredArray = [] ،ل (يترك أنا = 0; أنا
لو (الحالة (arrayToBeFiltered [i])) {
يترك y = تحويل (fn) ([arrayToBeFiltered [i]]) [0]
filteredArray.push (y)
} آخر {
filteredArray.push (arrayToBeFiltered [i])
}
}
يعود مصفوفة
}
تحدد كتلة التعليمات البرمجية هذه وظيفة تقوم بما قد تشك فيه - فهي تتحقق من العناصر الموجودة في المصفوفة التي تلبي شرطًا معينًا وتحولها باستخدام تحول() وظيفة. لاستخدام هذه الوظيفة ، عليك القيام بشيء مثل هذا:
عامل التصفية والتحويل ((x) => س * 2, [ 1, 2, 3, 4, 5 ] ، (س) => س٪ 20)
على عكس تحول وظيفة التصفية والتحويل تأخذ الوظيفة وظيفتين كمعلمات: الجبهة الوطنية و حالة. ال حالة تتحقق الدالة مما إذا كانت المعلمة قد تم تمريرها أم أنها عدد زوجي وتعيد القيمة true. خلاف ذلك ، فإنها ترجع خطأ.
لو حالة يقرر إلى صواب (تم استيفاء الشرط) ، عندها فقط يكون تحول وظيفة تسمى. يمكن أن يكون هذا المنطق مفيدًا إذا كنت تعمل مع مصفوفة وتريد تحويل عناصر معينة. إذا قمت بتشغيل هذا الرمز في وحدة تحكم المتصفح ، يجب أن تحصل على الاستجابة التالية:
[ 1, 4, 3, 8, 5 ]
يمكنك أن ترى أن هذه الوظيفة تقوم فقط بتحويل العناصر التي تلبي شرطًا معينًا ، تاركة العناصر التي لا تلبي الشرط كما هي.
Array.map () دالة الترتيب الأعلى في JavaScript
طرق المصفوفة مثل الخريطة () هي دالات ذات ترتيب أعلى تسهل التعامل مع المصفوفات. وإليك كيف يعمل.
يترك مجموعة = [ 1, 2, 3, 4, 5 ];
يترك convertedArray = array.map ((x) => س * 2);
عندما تقوم بتسجيل الدخول مصفوفة محولة في وحدة تحكم المتصفح ، يجب أن تحصل على نفس النتيجة التي حصلت عليها مع تحول الوظيفة المذكورة سابقًا:
[ 2, 4, 6, 8, 10 ]
مجموعة خريطة () يأخذ معلمتين ، تشير المعلمة الأولى إلى العنصر نفسه ، بينما تشير المعلمة الثانية إلى فهرس العنصر (الموضع في المصفوفة). مع فقط مجموعة خريطة () يمكنك تحقيق نفس النتائج مثل التصفية والتحويل وظيفة. إليك كيف تفعل ذلك:
يترك مجموعة = [ 1, 2, 3, 4, 5 ];
يترك convertedArray = array.map ((x) => ×٪ 20? س * 2: x) ؛
في مقطع التعليمات البرمجية أعلاه ، ترجع الدالة منتج العنصر الحالي و 2 ، إذا كان العنصر زوجيًا. خلاف ذلك ، فإنه يعيد العنصر كما هو.
مع المدمج في خريطة وظيفة ، لقد تمكنت من التخلص من الحاجة إلى عدة أسطر من التعليمات البرمجية ، مما أدى إلى وجود رمز أكثر وضوحًا وفرصًا أقل لحدوث الأخطاء.
الدالة Array.filter () في JavaScript
عندما تستدعي ملف منقي على مصفوفة ، تأكد من أن القيمة المرجعة للدالة التي تمررها إلى الطريقة إما صحيحة أو خاطئة. ال منقي يعيد التابع مصفوفة تحتوي على عناصر تفي بالشرط الذي تم تمريره. هنا كيف تستخدمه.
وظيفةcheckFirstLetter(كلمة) {
يترك أحرف العلة = "aeiou"لو (الحروف المتحركة.يشمل(كلمة[0].toLowerCase())) {
يعود كلمة؛
} آخر {
يعود;
}
}
يترك كلمات = [ "مرحبًا", "من", "ال", "أطفال", "ل", "كوكب", "أرض" ];
يترك النتيجة = الكلمات.(x) => checkFirstLetter (x))
تتجاوز كتلة التعليمات البرمجية أعلاه امتداد كلمات صفيف وفلاتر أي كلمة يكون حرفها الأول حرف علة. عند تشغيل الكود وتسجيل ملف نتيجة متغير ، يجب أن تحصل على النتائج التالية:
[ 'ل', 'أرض' ];
الدالة Array.reduce () في JavaScript
ال يقلل() تأخذ وظيفة الترتيب الأعلى معلمتين. المعلمة الأولى هي وظيفة التخفيض. وظيفة التخفيض هذه مسؤولة عن الجمع بين قيمتين وإرجاع تلك القيمة. المعلمة الثانية اختيارية.
يحدد القيمة الأولية لتمريرها إلى الوظيفة. إذا كنت تريد إرجاع مجموع كل العناصر في المصفوفة ، يمكنك القيام بما يلي:
يترك أ = [ 1, 2, 3, 4, 5];
يترك مجموع = 0;ل (يترك أنا = 0; أنا
sum = sum + a [i] ؛
}
وحدة التحكم.log (المجموع) ؛
إذا قمت بتشغيل الكود ، مجموع يجب أن يكون 15. يمكنك أيضًا اتباع نهج مختلف مع يقلل وظيفة.
يترك أ = [ 1, 2, 3, 4, 5 ];
المجموع = أ.تخفيض ((ج ، ن) => ج + ن) ؛
وحدة التحكم.log (المجموع) ؛
تعتبر كتلة التعليمات البرمجية أعلاه أنظف بكثير مقارنة بالمثال السابق. في هذا المثال ، تأخذ دالة التخفيض معلمتين: ج و ن. ج يشير إلى العنصر الحالي في حين ن يشير إلى العنصر التالي في المصفوفة.
عند تشغيل الكود ، تمر وظيفة المخفض عبر المصفوفة ، مع التأكد من إضافة القيمة الحالية إلى النتيجة من الخطوة السابقة.
قوة وظائف الرتبة العليا
تعتبر الوظائف في JavaScript قوية ، ولكن الوظائف ذات الترتيب الأعلى تأخذ الأشياء إلى المستوى التالي. يتم استخدامها على نطاق واسع في البرمجة الوظيفية ، مما يتيح لك تصفية المصفوفات وتقليلها وتعيينها بسهولة.
يمكن أن تساعدك وظائف الترتيب الأعلى في كتابة المزيد من التعليمات البرمجية المعيارية والقابلة لإعادة الاستخدام عند إنشاء التطبيقات.