Menu
Coddy logo textTech

Funciones variádicas (...)

Parte de la sección Lógica y flujo de control del Journey de Lua de Coddy. Lección 11 de 54.

A veces necesitas una función que pueda trabajar con cualquier número de argumentos. Quizá quieras calcular la suma de dos números, o de tres, o de diez, sin escribir funciones separadas para cada caso. Lua proporciona una sintaxis especial para esto: los tres puntos ...

Cuando colocas ... en la lista de parámetros de una función, se convierte en una función variádica que acepta cualquier cantidad de argumentos:

function sum(...)
    -- Cuerpo de la función
end

Dentro de la función, puedes acceder a estos argumentos usando ... nuevamente. Para trabajar con ellos más fácilmente, puedes empaquetarlos en una tabla usando llaves:

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))  -- Salida: 30
print(sum(1, 2, 3, 4, 5))  -- Salida: 15

La expresión {...} crea una tabla de estilo lista que contiene todos los argumentos pasados a la función. Después puedes iterar por esta tabla como por cualquier otra, usando el operador de longitud # o ipairs().

challenge icon

Desafío

Fácil

Escribe una función calculateAverage que acepte cualquier cantidad de argumentos numéricos y devuelva su promedio.

Usa la sintaxis variádica ... para aceptar una cantidad flexible de argumentos, empaquetarlos en una tabla, calcular su suma y dividirla por la cantidad.

Nota: El código inicial (marcado como "Don't touch this code") lee números de la entrada, convierte cada uno de texto a número usando tonumber() y los almacena en una tabla llamada numbers. Al final, llama a tu función usando unpack(numbers), que distribuye los valores de la tabla como argumentos individuales, de modo que tu función los recibe como .... No necesitas modificar ni comprender este código en detalle; concéntrate únicamente en escribir calculateAverage.

Lógica:

  • Empaqueta todos los argumentos en una tabla usando {...}
  • Recorre la tabla para calcular la suma de todos los números
  • Divide la suma por la cantidad de argumentos para obtener el promedio
  • Devuelve el promedio como un número

Parámetros:

  • ... (números): Cantidad variable de argumentos numéricos

Devuelve: El promedio de todos los números proporcionados (número)

Pruébalo tú mismo

-- No toques este código --
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(...)
    -- Escribe código aquí
end

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

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo de control

Practica por tu cuenta: Compilador de Lua online