ما هو تعبير lambda في C++ ومتى يجب استخدامه؟
مرحباً بالجميع! أنا أتعلم C++ وكثيراً ما أرى في كود زملائي شيئاً مثل هذا:
```cpp
std::vector numbers = {5, 2, 8, 1, 9};
std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a < b; });
```
أو هكذا:
```cpp
std::for_each(numbers.begin(), numbers.end(), [](int& x) { x *= 2; });
```
أفهم أن هذه دوال مجهولة، لكنني لا أفهمها تماماً. في التوثيق مكتوب "تعبيرات lambda"، لكن الشروحات معقدة نوعاً ما. لدي عدة أسئلة:
1. ما هو تعبير lambda بكلمات بسيطة؟ وكيف يختلف عن الدالة العادية؟
2. لماذا نحتاج الأقواس المربعة `[]` في البداية؟ ماذا يمكن كتابة فيها؟
3. متى من الأفضل استخدام lambda، ومتى استخدام دالة عادية أو functor؟
4. كيف يتم التقاط المتغيرات بشكل صحيح؟ رأيت `[=]` و `[&]` و `[this]` — ماذا يعني هذا؟
خصوصاً أن بناء الجملة مع الالتقاط يخيفني. حاولت كتابة callback خاص بي للترتيب باستخدام متغير خارجي، ولم ينجح الأمر. اشرحوا لي من فضلكم