Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مقدمة في تعبيرات 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 مفيدة بشكل خاص للدوال القصيرة ذات الاستخدام لمرة واحدة التي لا تريد تعريفها بشكل منفصل. فهي تجعل التعليمات البرمجية أكثر إيجازًا وتحافظ على إبقاء المنطق المرتبط متقاربًا.

challenge icon

التحدي

سهل

Create برنامجًا يوضّح البنية الأساسية وتنفيذ تعبيرات lambda. سيختبر هذا التحدّي فهمك لكيفية تعريف واستدعاء دوال lambda بسيطة دون معاملات.

يجب أن يقوم برنامجك بما يلي:

  1. Create تعبير lambda يقوم بطباعة Hello from Lambda!
  2. Store تعبير lambda هذا في متغيّر باستخدام الكلمة المفتاحية auto
  3. Call دالة lambda لتنفيذها
  4. Create تعبير lambda ثانيًا يقوم بطباعة Lambda executed successfully!
  5. 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;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم C++ عبر الإنترنت