الدوال السهمية - جافاسكريبت

الدوال السهمية أو Arrow functions من بين المزايا الجديدة التي ظهرت في إصدار ECMAScript 2015 الحديث للغة البرمجة جافاسكريبت. وساهمت هذه الميزة منذ ذلك الحين في تغيير كبير لطريقة كتابة الدوال في مشاريع الجافاسكريبت.

نالت هذه الإضافة الجديدة استحسان معظم المطورين حول العالم، بحيث أننا لم نعد نرى كثيرا كلمة function عند إنشاء الدوال في الأكواد الحديثة.

طريقة كتابة مختصرة وسهلة

طريقة كتابة الدوال السهمية بسيطة ومختصرة مقارنة بالطريقة التقليدية، فالتعبير التالي :

يكافئ :

هذه الكتابة يمكن أن تُبسط أكثر، حيث يمكن حذف معقوفات الدالة إذا كانت الأخيرة تضم سطرا برمجيا واحدا فقط :

المعاملات يمكن تمريرها بين القوسين :

ويمكن حذف القوسين نهائيا إذا كانت الدالة تقبل معاملا واحدا فقط :

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

إرجاع ضمني بدون استخدام كلمة return

في الدوال السهمية يمكن القيام بعملية الإرجاع من دون الحاجة لاستخدام الكلمة المفتاحية return.

يمكن إرجاع القيمة في حال كان لدينا سطر واحد فقط بهذه الطريقة :

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

الكائن this يعمل بشكل مختلف في الدوال السهمية

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

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

لنلاحظ هذا المثال :

النتيجة هنا طبيعية بالنظر إلى أن this يشير إلى الكائن User الذي بدوره يتوفر على الخاصيتين firstName و lastName.

أما الدوال السهمية، فهي كما قلنا تعمل بشكل مختلف. لاحظوا هذا الكود :

النتيجة هنا كما ترون هي “undefined undefined”، لأن الدوال السهمية ترث قيمة الكائن this من ما يعرف ب Context Execution أو سياق التنفيذ الخاص بها، وهو في حالتنا window أو null في حالة تم استخدام وضع “use strict“.

من هذا نستنتج أن الدوال السهمية لا تصلح لتكون وظائف (methods) بداخل Literal Objects في جافاسكريبت. كما أنه لا يمكن استخدامها ك Constructors كما نفعل مع الدوال التقليدية.

هناك حالة أخرى لا ينصح فيها باستخدام Arrow Functions، أتحدث هنا عن دوال الإرجاع Callbacks الخاصة بأحداث DOM.

أنظروا إلى المثالين الآتيين لتعرفوا السبب :

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

للتعرف أكثر على الحالات التي لا يجب فيها الإستعانة بالدول السهمية، أنصحكم بقراءة هذا المقال الممتاز من مدونة WesBos.


مراجع :

3 تعليقات

ترك الرد

Please enter your comment!
Please enter your name here