مقدمة في تعبيرات Lambda
جزء من قسم المنطق وتدفق التنفيذ في رحلة C++ على Coddy. الدرس 42 من 56.
تُعدّ تعبيرات Lambda ميزة قوية في C++ تتيح لك إنشاء function صغيرة ومجهولة المصدر مباشرةً في المكان الذي تحتاج إليها فيه. فكّر فيها على أنها mini-functions يمكنك تعريفها واستخدامها دون الحاجة إلى كتابة تصريح function منفصل.
تتبع الصيغة الأساسية لـ lambda expression هذا النمط: [](){}. تُسمى الأقواس المربعة [] capture clause، وتحتوي الأقواس المستديرة () على المعلمات (تمامًا مثل الدوال العادية)، وتحتوي الأقواس المعقوفة {} على نص الـ function.
تتحكم capture clause في المتغيرات من النطاق المحيط التي يمكن لـ lambda استخدامها. والأشكال الأكثر شيوعًا هي:
[=]: التقاط جميع المتغيرات المحلية by value (تحصل lambda على نسخة copy خاصة بها)[&]: التقاط جميع المتغيرات المحلية by reference (تصل lambda إلى المتغيرات الأصلية)[]: عدم التقاط أي شيء (لا يمكن لـ lambda استخدام أي متغيرات خارجية)إليك كيفية إنشاء واستدعاء lambda بسيطة:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // استدعِ دالة اللامدايمكنك أيضًا تعريف وتنفيذ دالة lambda فورًا دون تخزينها في متغير:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();تُعد تعبيرات Lambda مفيدة بشكل خاص للدوال القصيرة ذات الاستخدام لمرة واحدة التي لا تريد تعريفها بشكل منفصل. فهي تجعل التعليمات البرمجية أكثر إيجازًا وتحافظ على إبقاء المنطق المرتبط متقاربًا.
التحدي
سهلCreate برنامجًا يوضّح البنية الأساسية وتنفيذ تعبيرات lambda. سيختبر هذا التحدّي فهمك لكيفية تعريف واستدعاء دوال lambda بسيطة دون معاملات.
يجب أن يقوم برنامجك بما يلي:
- Create تعبير lambda يقوم بطباعة
Hello from Lambda! - Store تعبير lambda هذا في متغيّر باستخدام الكلمة المفتاحية
auto - Call دالة lambda لتنفيذها
- Create تعبير lambda ثانيًا يقوم بطباعة
Lambda executed successfully! - Execute تعبير lambda الثاني immediately دون Store له في متغيّر
استخدم تنسيق الإخراج الدقيق التالي:
Hello from Lambda!
Lambda executed successfully!تذكّر أن تعبيرات lambda تستخدم البنية [](){}، حيث إن الأقواس المربعة [] هي عبارة الالتقاط، والأقواس المستديرة () تحتوي على المعاملات (وهي فارغة في هذا التحدّي)، والأقواس المعقوفة {} تحتوي على جسم الدالة. يمكنك Store تعبير lambda في متغيّر باستخدام 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;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
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++ عبر الإنترنت