C++Lambda Expressions
- مفهوم الـ Lambda Expressions
- أساسيات التعامل مع Lambda Expressions
- أمثلة شاملة حول طرق تعريف Lambda Expressions
مفهوم الـ Lambda Expressions
إبتداءاً من الإصدر c++11
تم إضافة أسلوب جديد يمكن استخدامه لتقليل حجم الكود عند تعريف دوال جديدة.
الأسلوب الجديد الذي سنتعلمه في هذا الدرس لتعريف الدوال يقال له Lambda Expressions أو Closures أو Literals Function أو Lambdas فقط.
الشكل العامل لتعريف Lambda Expression
مكان الكلمة captures
يمكنك تمرير قيم متغيرات معرّفة خارج الدالة أو عناوينها فقط حتى تتمكن من الوصول إليها و التعامل معها من داخل الدالة مع الإشارة إلى أنه يجب وضع مربعين فارغين []
في حال لم ترد وضع بارامتيرات فيها.
مكان الكلمة parameters
يمكنك وضع بارامتيرات للدالة مع الإشارة إلى أنك تستطيع عدم وضع القوسين ()
من الأساس في حال لم ترد وضع بارامتيرات فيها.
مكان الكلمة returnTypesDeclaration
نمرر نوع القيمة التي سترجعها الدالة عندما يتم تنفيذها. هنا يستطيع المترجم على الأغلب معرفة ما سترجعه الدالة بشكل تلقائي في حال كانت تحتوي على أمر واحد فقط و لكن يفضّل دائماً أن تحدد نوع الإرجاع بنفسك.
مكان الكلمة lambdaStatements
نضع الأوامر التي نريدها أن تتنفذ عند استدعاء الدالة.
أساسيات التعامل مع Lambda Expressions
الدالة العادية نقوم بإعطائها إسم عند تعريفها و لاحقاً عندما نريد تنفيذها نقوم باستدعائها من خلال كتابة إسمها و هكذا سيفهم المترجم أننا نريد تنفيذها.
الدالة التي يتم تعريفها بأسلوب Lambda Expressions لا نعطيها إسم و لكننا نقوم بإسنادها لمتغير من نفس نوعها حتى نستدعيها من خلاله أون نجعل نوع المتغير الذي سيشير لها auto حتى يتولى المترجم وضع النوع المناسب لهذا المتغير.
في المثال التالي قمنا بتعريف دالة لا تملك أي باراميتر بأسلوب Lambda Expressions.
عند تعريفها قمنا بإسنادها لمتغير إسمه lambda
و نوعه auto حتى نتمكن لاحقاً من استدعائها من خلاله.
في الأخير قمنا باستدعاء الدالة بواسطة المتغير lambda
و لاحظ كيف أننا وضعنا قوسين بعد إسم المتغير كما نستدعي الدالة العادية بالضبط.
مثال
سنحصل على النتيجة التالية عند التشغيل.
My first lambda expression
الدالة التي قمنا بتعريفها في المثال السابق كان بإمكاننا تعريفها بعدة أشكال مختلفة و الحصول على نفس النتيجة تماماً.
فيما يلي سنعرض لك 5 طرق مختلفة كان يمكن اتباعها لتعريف الدالة التالية.
الطريقة الأولى: كان بإمكانك إضافة أقواس الباراميترات و تركها فارغة كالتالي.
الطريقة الثانية: كان بإمكانك وضع الكلمة void بين القوسين مما يعني أنه لا يوجد بارامتيرات أيضاً كالتالي.
الطريقة الثالثة: كان بإمكانك تحديد أن الدالة لا ترجع قيمة بعد أن يتم تنفيذها, أي ذكر أن نوعها void و هنا لا بد من وضع أقواس الباراميترات قبلها كالتالي.
الطريقة الرابعة: كان بإمكانك وضع أقواس الباراميترات و بداخلها الكلمة void بالإضافة لذكر أن الدالة نوعها void أيضاً كالتالي.
أمثلة شاملة حول طرق تعريف Lambda Expressions
المثال الأول
في المثال التالي ستتعلم كيفية وضع بارميترات لدالة معرّفة بأسلوب Lambda Expressions بالإضافة إلى استدعائها.
المثال الثاني
في المثال التالي ستتعلم كيفية تعريف دالة بأسلوب Lambda Expressions ترجع قيمة بالإضافة إلى استدعائها.
المثال الثالث
في المثال التالي ستتعلم كيفية تعريف دالة بأسلوب Lambda Expressions مع تمرير متغيرات خارجية لها بالإضافة إلى استدعائها.
المثال الرابع
في المثال التالي ستتعلم كيفية تعريف دالة بأسلوب Lambda Expressions مع تمرير عنواين متغيرات خارجية لها بالإضافة إلى استدعائها.
المثال الخامس
المثال التالي مهم جداً لأنه يعتبر الهدف الأساسي من ابتكار أسلوب Lambda Expressions و هي عادةً ما تستخدم لهذا الهدف بالتحديد, حيث أنك ستتعلم منه كيفية تمرير الدالة كباراميتر لدالة أخرى لحظة تعريفها.