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

الدوال كقيم من الدرجة الأولى

جزء من قسم Logic & Flow في رحلة Lua على Coddy — الدرس 12 من 54.

في لغة Lua، تُعد الدوال أكثر من مجرد كتل برمجية تؤدي مهامًا—فهي قيم يمكن التعامل معها مثل أي نوع بيانات آخر. هذا يعني أنه يمكنك العمل مع الدوال بنفس الطريقة التي تعمل بها مع الأرقام أو النصوص أو الجداول.

يمكنك تخزين دالة في متغير:

local greet = function()
    print("Hello!")
end

greet()  -- المخرجات: Hello!

هنا، يتم تعيين الدالة للمتغير greet، ويمكنك استدعاؤها تماماً مثل أي دالة عادية. هذا يفتح إمكانيات قوية لكيفية هيكلة الكود الخاص بك.

يمكن أيضاً تمرير الدوال كوسطاء (arguments) لدوال أخرى. هذا مفيد بشكل خاص عندما تريد أن تستخدم دالة واحدة السلوك المحدد في دالة أخرى:

function executeAction(action)
    action()
end

local sayHello = function()
    print("Hello from a function!")
end

executeAction(sayHello)  -- المخرجات: Hello from a function!

في هذا المثال، تستقبل executeAction دالة كمعامل لها وتقوم باستدعائها. يتم تمرير الدالة sayHello تماماً كما تمرر رقماً أو سلسلة نصية.

يمكن للدوال حتى أن تُرجع دوالاً أخرى. يتيح لك ذلك إنشاء دوال بشكل ديناميكي بناءً على شروط أو معاملات معينة:

function createMultiplier(factor)
    return function(number)
        return number * factor
    end
end

local double = createMultiplier(2)
print(double(5))  -- النتيجة: 10
challenge icon

التحدي

سهل

اكتب دالة applyOperation تأخذ a و b و operation وتعيد نتيجة تطبيق دالة العملية على الرقمين.

المعامل operation هو جدول يحتوي على دالة سيتم استدعاؤها مع a و b كوسطاء.

المنطق:

  • استخرج الدالة من جدول operation باستخدام المفتاح "func"
  • استدعِ تلك الدالة مع a و b كوسطاء
  • أعد النتيجة

المعاملات:

  • a (رقم): الرقم الأول
  • b (رقم): الرقم الثاني
  • operation (جدول): جدول يحتوي على دالة مخزنة في المفتاح "func"

المخرجات: نتيجة استدعاء دالة العملية مع a و b (رقم)

ورقة مرجعية

في لغة Lua، تُعد الدوال قيمًا من الدرجة الأولى (first-class values) يمكن تخزينها في متغيرات، وتمريرها كوسائط، وإرجاعها من دوال أخرى.

تخزين دالة في متغير:

local greet = function()
    print("Hello!")
end

greet()  -- المخرجات: Hello!

تمرير دالة كوسيط (argument):

function executeAction(action)
    action()
end

local sayHello = function()
    print("Hello from a function!")
end

executeAction(sayHello)  -- المخرجات: Hello from a function!

إرجاع دالة من دالة أخرى:

function createMultiplier(factor)
    return function(number)
        return number * factor
    end
end

local double = createMultiplier(2)
print(double(5))  -- المخرجات: 10

جرّب بنفسك

function applyOperation(a, b, operation)
    -- اكتب الكود هنا
end
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow