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

الدوال متغيرة المعاملات

جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy. الدرس 27 من 73.

لقد استخدمت ... (المعاملات المتغيرة) في Lua لكتابة دوال تقبل أي عدد من arguments. يتيح لك Luau إجراء تحديد نوع المعاملات المتغيرة، لذلك يتم التحقق من نوع كل argument وارد:

function sum(...: number): number
    local total = 0
    for _, n in ipairs({...}) do
        total = total + n
    end
    return total
end

print(sum(1, 2))           -- 3
print(sum(1, 2, 3, 4, 5))  -- 15

يُصرّح ...: number بأن كل argument إضافي يجب أن يكون رقمًا: تصبح sum(1, "two") خطأً في النوع. أدوات وقت التشغيل هي الأدوات التي تعرفها:

  • تجمع {...} المعاملات المتغيرة في مصفوفة (هنا {number})
  • تحسب select("#", ...) عدد المعاملات التي وصلت
  • يمكن تمرير ... مباشرةً إلى دالة أخرى، مثل math.max(...)

كما في Lua، يجب أن يكون ... هو المعامل الأخير: تأتي المعاملات العادية (المحددة الأنواع) أولًا، بينما يجمع الذيل المتغير بقية المعاملات:

function joinWords(separator: string, ...: string): string
    return table.concat({...}, separator)
end

print(joinWords("-", "a", "b", "c"))  -- a-b-c
challenge icon

التحدي

سهل

أنشئ دالة باسم sumAll تأخذ أي عدد من number من arguments (...: number) وتعيد sum الخاص بها كنوع number.

أنشئ دالة باسم countValues تأخذ أي عدد من string من arguments وتعيد عدد القيم التي تم تمريرها، كنوع number: استخدم select("#", ...).

أنشئ دالة باسم joinWords تأخذ separator: stringrequired متبوعًا بأي عدد من string من arguments، وتعيدها متصلة باستخدام الفاصل (استخدم table.concat على {...}): نوع return هو string.

استدعِ واطبع، كل واحد في سطر مستقل:

  1. sumAll(5, 10, 15)
  2. sumAll(1, 2, 3, 4, 5)
  3. countValues("a", "b", "c", "d")
  4. joinWords("-", "apple", "banana", "cherry")
  5. joinWords(" | ", "red", "green", "blue")

جرّب بنفسك

-- اكتب الكود هنا
-- sumAll(...: number): number       -- كرر على {...}
-- countValues(...: string): number  -- select("#", ...)
-- joinWords(separator: string, ...: string): string
-- ثم اطبع النتائج الخمس
quiz iconاختبر نفسك

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

جميع دروس مقدمة إلى Luau

تدرّب بنفسك: مترجم Lua عبر الإنترنت