01-04-2019, 06:23 PM | #1 |
تاريخ التسجيل: Feb 2019
العمر: 38
المشاركات: 1,149
التقييم: 10
|
تاريخ التسجيل: Feb 2019
العمر: 38
المشاركات: 1,149
التقييم: 10
مفهوم الدوال السهمية (Arrow Functions)
الدوال السهمية أو Arrow functions من بين المزايا الجديدة التي ظهرت في إصدار ECMAScript 2015 الحديث للغة البرمجة جافاسكريبت. وساهمت هذه الميزة منذ ذلك الحين في تغيير كبير لطريقة كتابة الدوال في مشاريع الجافاسكريبت.
نالت هذه الإضافة الجديدة استحسان معظم المطورين حول العالم، بحيث أننا لم نعد نرى كثيرا كلمة function عند إنشاء الدوال في الأكواد الحديثة. طريقة كتابة مختصرة وسهلة طريقة كتابة الدوال السهمية بسيطة ومختصرة مقارنة بالطريقة التقليدية، فالتعبير التالي : const fn = function() { //... } 1 2 3 const fn = function() { //... } يكافئ : const fn = () => { //... } 1 2 3 const fn = () => { //... } هذه الكتابة يمكن أن تُبسط أكثر، حيث يمكن حذف معقوفات الدالة إذا كانت الأخيرة تضم سطرا برمجيا واحدا فقط : const fn = () => console.log("Test!") 1 const fn = () => console.log("Test!") المعاملات يمكن تمريرها بين القوسين : const fn = (arg1, arg2) => console.log(arg1, arg2) 1 const fn = (arg1, arg2) => console.log(arg1, arg2) ويمكن حذف القوسين نهائيا إذا كانت الدالة تقبل معاملا واحدا فقط : const fn = arg => console.log(arg) 1 const fn = arg => console.log(arg) لاحظ كيف تم تبسيط الدوال في جافاسكريبت بفضل هذه الميزة الجديدة قد يبدو شكل هذه الدالة مربكاً في البداية، ولكن عند الإعتياد عليها سيزول هذا الإلتباس ويصبح هذا الكود واضح المعنى. إرجاع ضمني بدون استخدام كلمة return في الدوال السهمية يمكن القيام بعملية الإرجاع من دون الحاجة لاستخدام الكلمة المفتاحية return. يمكن إرجاع القيمة في حال كان لدينا سطر واحد فقط بهذه الطريقة : const fn = () => "Test" fn() //'Test' 1 2 const fn = () => "Test" fn() //'Test' في حالة أردنا إرجاع كائن من نوع JSON، يجب إحاطته بقوسين حتى لا يتم اعتبار معقوفتي الكائن على أنهما خاصتين بالدالة const fn = () => ( {key: "Test"} ) fn() //{key: "Test"} 1 2 const fn = () => ( {key: "Test"} ) fn() //{key: "Test"} الكائن this يعمل بشكل مختلف في الدوال السهمية يعتبر الكائن this من أكثر المفاهيم استشكالا على مطوري الجافاسكريبت، حتى المحترفين منهم في أحيان كثيرة. هذا الكائن يعمل بعدة أشكال مختلفة بحسب السياق الذي تم فيه استخدامه. من الجيد الإشارة إلى اختلاف الدوال السهمية في هذه الناحية عن الدوال التقليدية. الأخيرة عندما تكون بداخل كائن جافاسكريبت فإن this بداخلها يشير إلى الكائن الأب، الذي توجد بداخله الدالة التقليدية. لنلاحظ هذا المثال : النتيجة هنا طبيعية بالنظر إلى أن this يشير إلى الكائن User الذي بدوره يتوفر على الخاصيتين firstName و lastName. أما الدوال السهمية، فهي كما قلنا تعمل بشكل مختلف. لاحظوا هذا الكود : النتيجة هنا كما ترون هي “undefined undefined”، لأن الدوال السهمية ترث قيمة الكائن this من ما يعرف ب Context Execution أو سياق التنفيذ الخاص بها، وهو في حالتنا window أو null في حالة تم استخدام وضع “use strict“. من هذا نستنتج أن الدوال السهمية لا تصلح لتكون وظائف (methods) بداخل Literal Objects في جافاسكريبت. كما أنه لا يمكن استخدامها ك Constructors كما نفعل مع الدوال التقليدية. هناك حالة أخرى لا ينصح فيها باستخدام Arrow Functions، أتحدث هنا عن دوال الإرجاع Callbacks الخاصة بأحداث DOM. أنظروا إلى المثالين الآتيين لتعرفوا السبب : const link = document.querySelector('#link') link.addEventListener('click', () => { // this === window }) 1 2 3 4 const link = document.querySelector('#link') link.addEventListener('click', () => { // this === window }) const link = document.querySelector('#link') link.addEventListener('click', function() { // this === link }) 1 2 3 4 const link = document.querySelector('#link') link.addEventListener('click', function() { // this === link }) لاحظوا بأن this داخل دالة الإرجاع السهمية يشير إلى الكائن العام window. هذا غير مناسب لنا في هذه الحالة ولا يبدو منطقيا، فنحن عادة نحتاج في دالة الإرجاع لحدث معين أن يشير this إلى العنصر صاحب هذا الحدث، وهو في حالتنا العنصر link#. لهذا يجب دائما الإبتعاد عن الدوال السهمية في مثل هذه المواقف لأنها غير مجدية. المصدر: منتديات رحيل لكل العرب - من قسم: قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress |
اقتباس |
أضف رد جديد |
الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1) | |
|
|
المواضيع المتشابهه | ||||
الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة |
الدوال المساعدة المخصصة Custom Helpers في Laravel 5 | الفارس | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 1 | 26-07-2019 03:14 PM |
30. دورة دوت نيت كور - الدوال والإجراءات | C# Functions and Procedures | القيصر | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 0 | 13-05-2019 09:34 PM |
تعرف علي مستقبل تصميم تطبيقات الجوال | raheel | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 0 | 11-04-2019 06:47 PM |
طريقة توافق موقعك لأجهزة الجوال , وجعله Mobile friendly | raheel | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 0 | 14-03-2019 03:26 PM |
طريقة تمكنك من جعل موقعك متوافق مع الجوال للمنتدى والووردبريس | raheel | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 0 | 14-03-2019 02:53 PM |