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

الدوال متغيرة الوسائط (...)

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

أحيانًا تحتاج إلى دالة يمكنها العمل مع أي عدد من الوسائط. ربما ترغب في حساب مجموع رقمين، أو ثلاثة، أو عشرة - دون كتابة دوال منفصلة لكل حالة. توفر Lua صيغة خاصة لهذا: النقاط الثلاث ...

عندما تضع ... في قائمة معاملات الدالة، فإنها تصبح دالة متغيرة الوسائط (variadic function) تقبل أي عدد من الوسائط:

function sum(...)
    -- متن الدالة
end

داخل الدالة، يمكنك الوصول إلى هذه الوسائط باستخدام ... مرة أخرى. للعمل معها بسهولة أكبر، يمكنك حزمها في جدول باستخدام الأقواس المتعرجة:

function sum(...)
    local args = {...}
    local total = 0
    for i = 1, #args do
        total = total + args[i]
    end
    return total
end

print(sum(5, 10, 15))  -- المخرجات: 30
print(sum(1, 2, 3, 4, 5))  -- المخرجات: 15

التعبير {...} ينشئ جدولاً بنمط القائمة يحتوي على جميع الوسائط الممرة إلى الدالة. يمكنك بعد ذلك التكرار عبر هذا الجدول تماماً مثل أي جدول آخر، باستخدام عامل الطول # أو ipairs().

challenge icon

التحدي

سهل

اكتب دالة calculateAverage تقبل أي عدد من الوسائط الرقمية وتعيد متوسطها الحسابي.

استخدم بناء الجملة المتغير ... لقبول عدد مرن من الوسائط، وقم بحزمها في جدول، واحسب مجموعها، ثم اقسمه على عددها.

ملاحظة: كود البداية (المحدد بعبارة "Don't touch this code") يقرأ الأرقام من الإدخال، ويحول كل منها من نص إلى رقم باستخدام tonumber()، ويخزنها في جدول يسمى numbers. في النهاية، يستدعي دالتك باستخدام unpack(numbers)، الذي ينشر قيم الجدول كوسائط فردية — لذا تستقبلها دالتك كـ .... لست بحاجة إلى تعديل أو فهم هذا الكود بالتفصيل؛ فقط ركز على كتابة calculateAverage.

المنطق:

  • احزم جميع الوسائط في جدول باستخدام {...}
  • قم بالمرور عبر الجدول لحساب مجموع كل الأرقام
  • اقسم المجموع على عدد الوسائط للحصول على المتوسط
  • أعد المتوسط كـ number

المعاملات:

  • ... (أرقام): عدد متغير من الوسائط الرقمية

المخرجات: متوسط جميع الأرقام المقدمة (number)

ورقة مرجعية

تدعم لغة Lua الدوال متغيرة الوسائط (variadic functions) التي يمكنها قبول أي عدد من الوسائط باستخدام صيغة النقاط الثلاث ...:

function sum(...)
    -- جسم الدالة
end

داخل دالة متغيرة الوسائط، قم بحزم الوسائط في جدول باستخدام {...}:

function sum(...)
    local args = {...}
    local total = 0
    for i = 1, #args do
        total = total + args[i]
    end
    return total
end

print(sum(5, 10, 15))  -- المخرجات: 30
print(sum(1, 2, 3, 4, 5))  -- المخرجات: 15

التعبير {...} ينشئ جدولاً يحتوي على جميع الوسائط. يمكنك التكرار خلاله باستخدام عامل الطول # أو ipairs().

جرّب بنفسك

-- لا تلمس هذا الكود --
local numbers = {}
while true do
    local input = io.read()
    if input == nil or input == "" then
        break
    end
    local num = tonumber(input)
    if num then
        table.insert(numbers, num)
    end
end
-------------------------

function calculateAverage(...)
    -- اكتب الكود هنا
end

local average = calculateAverage(unpack(numbers))
print("Average: " .. average)

quiz iconاختبر نفسك

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

جميع دروس Logic & Flow