Menu
Coddy logo textTech

Funciones variádicas (...)

Parte de la sección Logic & Flow 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. Tal vez quieras calcular la suma de dos números, o tres, o 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 número de argumentos:

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

Dentro de la función, puedes acceder a estos argumentos usando ... de nuevo. 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))  -- Resultado: 30
print(sum(1, 2, 3, 4, 5))  -- Resultado: 15

La expresión {...} crea una tabla de estilo lista que contiene todos los argumentos pasados a la función. Luego puedes iterar a través de esta tabla como 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 un número flexible de argumentos, empaquetarlos en una tabla, calcular su suma y dividirla por la cantidad total.

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), lo que expande los valores de la tabla como argumentos individuales — por lo que tu función los recibe como .... No necesitas modificar ni entender este código en detalle; solo concéntrate en escribir calculateAverage.

Lógica:

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

Parámetros:

  • ... (numbers): Cantidad variable de argumentos numéricos

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

Hoja de referencia

Lua admite funciones variádicas que pueden aceptar cualquier número de argumentos utilizando la sintaxis de tres puntos ...:

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

Dentro de una función variádica, empaqueta los argumentos en una tabla usando {...}:

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 que contiene todos los argumentos. Puedes iterar a través de ella usando el operador de longitud # o ipairs().

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 el 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 Logic & Flow