البرمجة

استخدام اللامبدا في C++

عندما نرى الرمز “&” موضوعًا قبل تعريف دالة في لغة البرمجة C++، فإننا ندخل في عالم اللامبدا (Lambda). تُستخدم اللامبدا في C++ لإنشاء دوال صغيرة محلية (anonymous functions) يمكن استخدامها في مواضع محددة في الكود بدون الحاجة لتعريف دالة مستقلة.

الرمز “[&]” الموجود في هذا السياق يُشير إلى “الالتقاط بالمرجع” (capture by reference)، وهو نوع من الاصطياد الذي يسمح للدالة المنشأة بالوصول إلى المتغيرات المحلية في نطاق الكود الذي تم فيه إنشاء اللامبدا، بالإشارة إلىها بواسطة المرجع (&)، وليس بقيمتها الفعلية. هذا يعني أن أي تغيير يتم على هذه المتغيرات داخل اللامبدا سينعكس على القيمة الأصلية للمتغيرات خارج اللامبدا.

في السياق الذي ذكرته، اللامبدا تأخذ معها قائمة من المتغيرات التي سيتم الالتقاط بها بالمرجع، وهي القائمة التي تأتي بين الأقواس المربعة “[&]”. في هذا المثال، تُلتقط جميع المتغيرات المحيطة باللامبدا باستخدام المرجع.

الآن، بالنسبة للجزء الآخر من السؤال الذي يشير إلى الاستخدام الذي يتم فيه اللامبدا في سطر الكود “unsigned short ok = get_allowed(0, vect);”، يبدو أن هذا السطر يقوم بتعيين قيمة متغير “ok” بناءً على قيمة مُرجعة من دالة “get_allowed”. ومن الواضح أن هذه الدالة لا تُعرف بشكل مباشر في القطعة المعطاة من الكود، ولكن يُفترض أنها تعود بقيمة تُحدد ما إذا كانت العملية مسموحة (مثل “true” أو “false”) باستخدام المعطيات التي تم تمريرها إليها.

بشكل عام، للإجابة عن السؤال الأصلي، “[&]” في هذا السياق يُمثل الالتقاط بالمرجع في اللامبدا، ويتيح الوصول إلى المتغيرات المحلية باستخدام المرجع.

المزيد من المعلومات

بالطبع، دعني أكمل المقال لشرح المفهوم بشكل أكثر تفصيلًا:

عندما نستخدم اللامبدا في C++، فإننا عادةً ما نحتاج إلى الوصول إلى المتغيرات المحيطة بها في نطاق الكود الذي تم فيه إنشاء اللامبدا. هذا الأمر ضروري في العديد من الحالات، خاصة عند استخدام اللامبدا في دوال رقمية (algorithms) مثل الدوال التي تُمرّر إلى الدوال مثل “std::for_each”، حيث يكون من الضروري الوصول إلى متغيرات خارج نطاق اللامبدا.

لتحقيق هذا، يمكننا استخدام الاصطياد بالمرجع بواسطة الرمز “[&]”، كما رأينا في السياق السابق. وبالتالي، يمكن للامبدا أن تستخدم هذه المتغيرات المحلية باستخدام المرجع، مما يسمح بتعديل قيمها داخل اللامبدا بشكل يؤثر على قيمها الخارجية.

الآن، بالنسبة لاستخدام اللامبدا في السطر “unsigned short ok = get_allowed(0, vect);”، يُفترض أن دالة “get_allowed” تعود بقيمة منطقية (boolean) تُحدد ما إذا كانت العملية مسموحة أم لا باستخدام المعطيات التي تم تمريرها إليها. وبما أن “get_allowed” ليست معرفة في الجزء المعطى من الكود، يُفترض أنها تمتلك تعريفًا في نطاق أوسع في البرنامج.

بشكل عام، يتيح لنا استخدام اللامبدا ميزة قوية في C++ لإنشاء دوال محلية صغيرة يمكن استخدامها في الأماكن التي تتطلب العمل مع الدوال، وتحديداً في حالات استخدام دوال رقمية. وعند استخدام اللامبدا، يجب أن نأخذ في الاعتبار طريقة الاصطياد المناسبة، سواء كانت الالتقاط بالقيمة “[=]” أو الالتقاط بالمرجع “[&]”، وذلك بناءً على الاحتياجات الخاصة بالسياق الذي نستخدم فيه اللامبدا.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر