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

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

جزء من قسم المنطق والتحكم في التدفق في رحلة Lua على Coddy. الدرس 11 من 54.

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

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

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 تقبل أي عدد من الوسائط الرقمية وتُرجع average الخاص بها.

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

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

المنطق:

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

المعلمات:

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

القيمة المُعادة: average لجميع الأعداد المقدمة (عدد)

جرّب بنفسك

-- لا تلمس هذا الكود --
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اختبر نفسك

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

جميع دروس المنطق والتحكم في التدفق

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