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

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

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

لقد استخدمت ... الخاص بـ Lua (الـ varargs) لكتابة دالة تقبل أي عدد من الـ arguments. يتيح لك Luau تحديد نوع (type) الـ varargs، بحيث يتم فحص كل 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 إضافي يجب أن يكون number — مما يجعل sum(1, "two") خطأ في النوع (type error). أدوات وقت التشغيل هي نفسها التي تعرفها:

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

كما هو الحال في Lua، يجب أن يكون ... هو الـ parameter الـ last — تأتي الـ parameters العادية (الُمحددة النوع) أولاً، ويجمع الـ variadic tail الباقي:

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

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

التحدي

سهل

أنشئ دالة باسم sumAll تأخذ أي عدد من وسايط number (...: number) وترجع مجموعها كـ number.

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

أنشئ دالة باسم joinWords تأخذ معاملًا مطلوبًا separator: string متبوعًا بأي عدد من وسايط string، وترجعها مربوطة ببعضها باستخدام الفاصل (استخدم table.concat على {...}) — نوع الإرجاع 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