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

تعبيرات Lambda مع المعاملات

جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 43 من 56.

الآن بعد أن فهمت بناء جملة lambda الأساسي، لنقم بجعل lambdas أكثر فائدة من خلال إضافة المعلمات (parameters). تماماً مثل الدوال العادية، يمكن لـ lambdas قبول قيم إدخال للعمل معها.

لإضافة معاملات إلى تعبير لامدا (lambda)، ضعها داخل الأقواس بعد جملة الالتقاط (capture clause):

auto addNumbers = [](int a, int b) {
    std::cout << "Sum: " << (a + b) << std::endl;
};

addNumbers(5, 3);  // يطبع: Sum: 8

تعمل صيغة المعلمات تماماً مثل معلمات الدوال العادية - حيث تقوم بتحديد النوع متبوعاً باسم المعلمة. يمكنك الحصول على معلمات متعددة مفصولة بفاصلات، تماماً كما هو موضح أعلاه.

يمكنك أيضاً استدعاء lambda مع معاملات مباشرة دون تخزينها:

[](int x, int y) {
    std::cout << "Product: " << (x * y) << std::endl;
}(4, 7);  // يطبع: Product: 28

إن هذه القدرة على قبول المعاملات (parameters) تجعل دوال لامبدا (lambdas) أكثر مرونة وقابلية لإعادة الاستخدام، مما يتيح لك إنشاء دوال صغيرة يمكنها معالجة قيم مدخلات مختلفة في كل مرة يتم استدعاؤها فيها.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يوضح تعبيرات لامبدا (lambda expressions) مع المعاملات من خلال بناء آلة حاسبة بسيطة تقوم بعمليات رياضية مختلفة. سيختبر هذا التحدي فهمك لكيفية تعريف تعبيرات لامبدا التي تقبل قيم الإدخال وتعمل معها.

سيتم توفير المدخلات التالية:

  • عددان صحيحان num1 و num2 يمثلان الأرقام المستخدمة في الحسابات
  • حرف operation يمثل العملية الحسابية المراد تنفيذها

يجب على برنامجك القيام بما يلي:

  1. إنشاء تعبير لامبدا باسم add يأخذ معاملين صحيحين ويطبع مجموعهما بالتنسيق Sum: [result]
  2. إنشاء تعبير لامبدا باسم subtract يأخذ معاملين صحيحين ويطبع الفرق بينهما بالتنسيق Difference: [result]
  3. إنشاء تعبير لامبدا باسم multiply يأخذ معاملين صحيحين ويطبع حاصل ضربهما بالتنسيق Product: [result]
  4. قراءة الرقمين وحرف العملية من المدخلات
  5. بناءً على حرف العملية، قم باستدعاء تعبير لامبدا المناسب مع الرقمين

سيكون حرف العملية واحداً مما يلي:

  • + للجمع (استدعاء لامبدا add)
  • - للطرح (استدعاء لامبدا subtract)
  • * للضرب (استدعاء لامبدا multiply)

استخدم تنسيق المخرجات الدقيق التالي بناءً على العملية:

للجمع:

Sum: [result]

للطرح:

Difference: [result]

للضرب:

Product: [result]

تذكر أن معاملات لامبدا يتم تعريفها داخل الأقواس بعد جملة الالتقاط (capture clause)، باستخدام نفس صيغة معاملات الدوال العادية. قم بتخزين كل لامبدا في متغير باستخدام الكلمة المفتاحية auto، ثم استدعِ اللامبدا المناسبة بناءً على حرف العملية المدخل باستخدام جملة if-else أو جملة switch.

ورقة مرجعية

يمكن لتعبيرات Lambda قبول المعاملات عن طريق وضعها داخل أقواس بعد جملة الالتقاط (capture clause):

auto addNumbers = [](int a, int b) {
    std::cout << "Sum: " << (a + b) << std::endl;
};

addNumbers(5, 3);  // يطبع: Sum: 8

تعمل صيغة المعاملات تماماً مثل معاملات الدوال العادية - حدد النوع متبوعاً باسم المعامل. يتم الفصل بين المعاملات المتعددة بفاصلات.

يمكنك أيضاً استدعاء lambda مع المعاملات مباشرة دون تخزينها:

[](int x, int y) {
    std::cout << "Product: " << (x * y) << std::endl;
}(4, 7);  // يطبع: Product: 28

جرّب بنفسك

#include <iostream>
using namespace std;

int main() {
    // قراءة المدخلات
    int num1, num2;
    char operation;
    cin >> num1 >> num2 >> operation;
    
    // TODO: إنشاء تعبيرات لامدا لعمليات الجمع والطرح والضرب
    // TODO: استخدام جملة if-else أو switch لاستدعاء تعبير لامدا المناسب بناءً على العملية
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow