مقدمة في تعبيرات Lambda
جزء من قسم Logic & Flow في رحلة C++ على Coddy. الدرس 42 من 56.
تُعدّ تعبيرات Lambda ميزة قوية في C++ تتيح لك إنشاء function صغيرة ومجهولة الاسم في المكان الذي تحتاج إليها فيه مباشرةً. فكّر فيها على أنها function مصغّرة يمكنك تعريفها واستخدامها دون الحاجة إلى كتابة تصريح function منفصل.
تتبع الصياغة الأساسية لتعبير lambda هذا النمط: [](){}. تُسمّى الأقواس المربعة [] بند الالتقاط، وتحتوي الأقواس المستديرة () على المعلمات (تمامًا مثل الدوال العادية)، بينما تحتوي الأقواس المعقوفة {} على جسم الـ function.
يتحكم بند الالتقاط في المتغيرات من النطاق المحيط التي يمكن لـ lambda استخدامها. وأكثر الأشكال شيوعًا هي:
[=] — التقاط جميع المتغيرات المحلية بالقيمة (تحصل lambda على نسخة copy خاصة بها)[&] — التقاط جميع المتغيرات المحلية بالمرجع (تصل lambda إلى القيم الأصلية)[] — عدم التقاط أي شيء (لا يمكن لـ lambda استخدام أي متغيرات خارجية)إليك كيفية إنشاء واستدعاء lambda بسيطة:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // استدعِ دالة اللامدايمكنك أيضًا تعريف وتنفيذ lambda immediately دون storing it في variable:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();تُعد تعبيرات Lambda مفيدة بشكل خاص لإنشاء function قصيرة تُستخدم مرة واحدة ولا تريد تعريفها بشكل منفصل. فهي تجعل code الخاص بك أكثر إيجازًا وتحافظ على إبقاء المنطق المرتبط متقاربًا.
التحدي
سهلأنشئ برنامجًا يوضّح الصياغة الأساسية وتنفيذ تعبيرات lambda. سيختبر هذا التحدي فهمك لكيفية تعريف واستدعاء تعبيرات lambda البسيطة دون معاملات.
يجب أن يقوم برنامجك بما يلي:
- إنشاء تعبير lambda يطبع
Hello from Lambda! - تخزين هذا الـ lambda في variable باستخدام الكلمة المفتاحية
auto - استدعاء lambda function لتنفيذها
- إنشاء تعبير lambda ثاني يطبع
Lambda executed successfully! - تنفيذ هذا الـ lambda الثاني immediately دون تخزينه في variable
استخدم تنسيق الإخراج الدقيق التالي:
Hello from Lambda!
Lambda executed successfully!تذكّر أن تعبيرات lambda تستخدم الصياغة [](){}، حيث تكون الأقواس المربعة [] هي عبارة الالتقاط، وتحوي الأقواس المستديرة () المعاملات (وهي فارغة في هذا التحدي)، وتحتوي الأقواس المعقوفة {} على جسم الـ function. يمكنك تخزين lambda في variable باستخدام auto variableName = [](){...}; ثم استدعاؤها باستخدام variableName();. وللتنفيذ الفوري، يمكنك استخدام الصياغة [](){...}(); التي تعرّف lambda وتستدعيها في تعليمة واحدة.
جرّب بنفسك
#include <iostream>
using namespace std;
int main() {
// TODO: اكتب الكود الخاص بك أدناه
// Create a lambda expression that prints "Hello from Lambda!"
// خزّنه في متغير باستخدام الكلمة المفتاحية auto
// استدعِ دالة lambda
// Create a second lambda that prints "Lambda executed successfully!"
// نفّذه فوراً دون تخزينه في متغير
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات4الخرائط (أزواج مفتاح-قيمة)
مقدمة إلى std::mapإنشاء خريطةالوصول إلى القيم وتعديلهاالتحقق من وجود المفاتيححذف الأزواجالتكرار عبر الخريطةمراجعة - تكرار الكلمات7الدوال المتقدمة
التمرير بالمرجعمقدمة في تعبيرات Lambdaتعبيرات Lambda مع المعاملاتتعبيرات Lambda مع قيم الإرجاعمقدمة في الاستدعاء الذاتيالمضروب بالاستدعاء الذاتيالفرز باستخدام Lambda2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vectorتدرّب بنفسك: مترجم C++ عبر الإنترنت