0Pricing
C++ Academy · درس

تعبيرات Lambda: الالتقاط والقابلية للتعديل والعُمومية

اكتب Lambdas مع الالتقاط ودلالات mutable ومعاملات auto العامة.

تعبيرات Lambda: الالتقاط والقابلية للتعديل والعُمومية درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

ما هي Lambda؟

‏Lambda كائن دالة مجهول ومضمّن. استخدموها عندما كنتم ستكتبون بدلًا منها دالة صغيرة مسماة أو بنية تحتوي على operator().

auto square = [](int x) { return x * x; };
std::cout << square(5);   // 25

تشريح الصياغة

تتكون Lambda من أربعة أجزاء:

  • [capture] — المتغيرات التي ستستخدمونها من النطاق المحيط
  • (parameters) — مثل قائمة معاملات الدالة
  • -> return_type — اختياري، وغالبًا ما يُستنتج
  • { body }

التقاط فارغ

تعني [] «عدم التقاط أي شيء». ولا تصل Lambda إلا إلى المتغيرات العامة والثابتة.

auto add = [](int a, int b) { return a + b; };

الالتقاط بالقيمة

أدرجوا المتغيرات في عبارة الالتقاط لنسخها إلى Lambda.

int n = 5;
auto times = [n](int x) { return x * n; };
n = 10;
std::cout << times(3);   // 15 (captured n was 5)

الالتقاط بالمرجع

استخدموا السابقة & للالتقاط بالمرجع. وتؤثر التغييرات داخل Lambda في المتغير الخارجي.

int counter = 0;
auto inc = [&counter]() { ++counter; };
inc(); inc(); inc();
std::cout << counter;   // 3

الالتقاطات الافتراضية: [=] و[&]

التقطوا كل ما يُستخدم بالقيمة باستخدام [=]، أو التقطوا كل شيء بالمرجع باستخدام [&]. استخدموا ذلك بحذر، وكونوا صريحين متى أمكن.

auto f = [=]() { return a + b; };   // copies a, b
auto g = [&]() { return a + b; };   // references a, b

Lambda قابلة للتغيير

تكون الالتقاطات بالقيمة، افتراضيًا، من النوع const داخل Lambda. أضيفوا mutable للسماح بتعديلها، علمًا بأن التغييرات تؤثر في نسخة Lambda فقط.

int n = 5;
auto f = [n]() mutable {
    n += 1;       // OK because of mutable
    return n;
};
f(); f();        // returns 6, then 7
std::cout << n;  // still 5 in outer scope

استنتاج نوع الإرجاع

يستنتج المصرّف نوع الإرجاع من جسم الدالة. اجعلوه صريحًا عند الحاجة.

auto half = [](int x) -> double { return x / 2.0; };

Lambdas عامة (C++14)

استخدموا auto في قائمة المعاملات للحصول على Lambda عامة تعمل مع أي نوع.

auto print = [](const auto& x) { std::cout << x << "\n"; };
print(42);          // int
print("hello");    // const char*
print(3.14);       // double

Lambdas كوسائط للدوال

تقبل خوارزميات STL دوال Lambda كمسندات وعمليات تحويل.

std::vector<int> v = {5, 2, 8, 1};
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });

Lambdas هي كائنات دوال

ينشئ المصرّف، من وراء الكواليس، فئة تحتوي على operator(). ويمكنكم تخزين Lambdas في std::function أو auto.

تحقق سريع

داخل Lambda مثل [n](int x) { return x * n; }، هل يمكنكم إسناد قيمة إلى n من دون جعل Lambda من النوع mutable؟

مراجعة

‏Lambdas كائنات دوال مجهولة ومضمّنة. التقطوا بالقيمة أو بالمرجع، واستخدموا mutable لتعديل الالتقاطات بالقيمة، واستخدموا معاملات auto لإنشاء Lambdas عامة في C++14 والإصدارات الأحدث.

الأسئلة الشائعة

هل درس «تعبيرات Lambda: الالتقاط والقابلية للتعديل والعُمومية» مجاني؟

نعم — نص درس «تعبيرات Lambda: الالتقاط والقابلية للتعديل والعُمومية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «تعبيرات Lambda: الالتقاط والقابلية للتعديل والعُمومية»؟

اكتب Lambdas مع الالتقاط ودلالات mutable ومعاملات auto العامة. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «تعبيرات Lambda: الالتقاط والقابلية للتعديل والعُمومية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏auto وdecltype واستنتاج النوع
  2. ‏range-based for وnullptr وenum class
  3. تعبيرات Lambda: الالتقاط والقابلية للتعديل والعُمومية
  4. الربط المنظّم وتهيئة if في C++17
← العودة إلى C++ Academy