توجد اختلافات إضافية بين الاثنين بصرف النظر عن بناء الجملة.

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

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

عدم القدرة على التمييز بين الاثنين قد يسبب مشاكل ويؤدي إلى استخدام غير صحيح. من الضروري لمطور JS الحديث أن يفهم كيف يؤثر إعلان كل وظيفة على النطاق والرؤية.

ما المقصود بوظائف سهم جافا سكريبت؟

وظائف سهم جافا سكريبت هي طريقة بديلة لتحديد الوظائف التي لا تستخدم الافتراضي وظيفة الكلمة الأساسية:

وظيفةرسالة(رسالة) {
وحدة التحكم.log (رسالة) ؛
}

مقدار ثابت logMessage = (رسالة) => {
وحدة التحكم.log (رسالة) ؛
}

مقدار ثابت logMessage = رسالة =>وحدة التحكم.log (رسالة) ؛

أعلاه ، يمكنك رؤية نفس الرسالة مكتوبة بثلاث طرق مختلفة. يستخدم الأول طريقة إعلان الوظيفة العادية. توضح الطريقتان التاليتان طريقتان لاستخدام وظائف سهم ES6.

instagram viewer

اعتمدت JavaScript لأول مرة بنية دالة السهم مع إصدار معايير ECMAScript 2015. قدمت وظائف Arrow طريقة نظيفة وموجزة لإنشاء وظائف بسرعة وحل مثير للاهتمام للعديد من مشكلات النطاق طويلة المدى داخل JavaScript.

جعلت هذه الميزات بسرعة وظائف السهم نجاحًا بين العديد من المطورين. من المرجح أن يجد المبرمجون الذين يبحثون في قاعدة بيانات جافا سكريبت الحديثة وظائف السهم مثل الوظائف العادية.

كيف تختلف وظائف السهم عن الوظائف العادية في JavaScript؟

للوهلة الأولى ، لا يبدو أن وظائف الأسهم تختلف كثيرًا عن الوظائف المعلنة باستخدام الكلمة الأساسية للوظيفة. خارج بناء الجملة ، كلاهما يغلف مجموعة من الإجراءات التي يمكن إعادة استخدامها والتي يمكن استدعاؤها من مكان آخر في الكود.

على الرغم من أوجه التشابه بين الاثنين ، إلا أن هناك بعض الاختلافات التي يحتاج المطورون إلى إدراكها.

الفرق في النطاق

عندما يتم الإعلان عن وظيفة عادية في JavaScript ، فإن ذلك تعمل الوظيفة كإغلاق ينشئ نطاقها الخاص. يمكن أن يسبب هذا مشكلة عند استخدام وظائف متخصصة معينة مثل setTimeout و تعيين الفاصل الزمني.

قبل ES6 ، كان هناك عدد كبير من الحلول التي من شأنها رفع العناصر إلى مستويات أعلى من النطاق لاستخدامها في عمليات الاسترجاعات. نجحت هذه الاختراقات ، لكن غالبًا ما كان من الصعب فهمها ، ويمكن أن تسبب مشاكل مع متغيرات معينة يتم استبدالها.

حلت وظائف الأسهم كلتا المشكلتين بطريقة بسيطة وأنيقة. عند استخدام دالة السهم كجزء من رد الاتصال ، يكون لها حق الوصول إلى نفس النطاق مثل الوظيفة التي تم استدعاؤها منها.

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

وظيفةالرسالة(رسالة ، تأخير) {

setTimeout (وظيفة(رسالة) {
وحدة التحكم.log (رسالة) ؛
}، تأخير)؛

}

رسالة ("مرحبا بالعالم", 1000);

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

عند تنفيذ وظيفة رد الاتصال ، يتغير النطاق ولا يمكن الوصول إلى الرسالة الأصلية. يتطلب استخدام الرسالة من داخل الإغلاق رفع الرسالة إلى متغير شامل ، مما قد يؤدي إلى الكتابة فوقها قبل رد النداء.

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

وظيفةالرسالة(رسالة ، تأخير) {

setTimeout (() => {
وحدة التحكم.log (رسالة) ؛
}، تأخير)؛

}

رسالة ("مرحبا بالعالم", 1000);

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

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

قراءة الكود

في حين أن وظائف السهم مفيدة مثل عمليات الاسترجاعات ، إلا أنها تُستخدم أيضًا للحفاظ على الكود نظيفًا وموجزًا. في القسم أعلاه ، يمكنك أن ترى أن استخدام وظيفة السهم يجعل من الواضح بسهولة ما سيحدث عند ملف الرسالة الوظيفة تسمى.

عندما تصبح الوظائف أكثر تعقيدًا ، فإن القليل من الوضوح يمكن أن يجعل الكود أكثر قابلية للقراءة. عند إنشاء كائنات ، يمكن أن يؤدي ذلك إلى تبسيط التعليمات البرمجية عند إضافة وظائف قصيرة:

فصلعداد{
_count = 0 ؛
زيادة = () => {
هذا._count + = 1;
}
إنقاص = () => {
هذا._count - = 1;
}
العد = () => {
يعودهذا._عدد؛
}
}

يترك قيراط = جديد عداد()؛

دور في البرمجة الشيئية

بينما تعد وظائف سهم JavaScript جزءًا لا يتجزأ من البرمجة الوظيفية ، إلا أن لها أيضًا مكانًا في البرمجة الشيئية. يمكن استخدام دالات الأسهم ضمن تعريفات الفئة:

فصلOrderLineItem{
_LineItemID = 0 ،
_Product = {} ؛
_ الكمية = 1 ؛

البناء(منتج) {
هذا._LineItemID = crypto.randomUUID () ،
هذا._Product = المنتج
}

changeLineItemQuantity = (جديد) => {
هذا._Qty = newQty ؛
}
}

لا يؤدي استخدام دالة السهم للإعلان عن العمليات ضمن إعلان الفئة إلى تغيير سلوك الوظيفة داخل الفصل. ومع ذلك ، خارج الفصل الدراسي ، فإنه يعرض الوظيفة ، مما يسمح باستخدامها بواسطة الفئات الأخرى.

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

متى يجب عليك استخدام وظائف سهم جافا سكريبت؟

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

تمنح وظائف Arrow المبرمجين طريقة واضحة وموجزة لكتابة عمليات الاسترجاعات دون تعريض أجزاء من النطاق التي يجب إخفاؤها. كما أنها تسمح بإنشاء تراكيب نظيفة وبسيطة ، مما يزيد من تمكين البرمجة الوظيفية في JavaScript.

يجب أن يكون مطورو JS على دراية بالاختلافات بين الصيغتين وأن يكونوا على دراية بأي بناء الجملة مناسب عند الإعلان عن وظائفهم.