Menu
Coddy logo textTech

Funções Variádicas (...)

Parte da seção Lógica e Fluxo do Journey de Lua da Coddy. Lição 11 de 54.

Às vezes, você precisa de uma função que possa trabalhar com qualquer quantidade de argumentos. Talvez queira calcular a soma de dois números, ou três, ou dez, sem escrever funções separadas para cada caso. Lua oferece uma sintaxe especial para isso: os três pontos ...

Quando você coloca ... na lista de parâmetros de uma função, ela se torna uma função variádica que aceita qualquer número de argumentos:

function sum(...)
    -- Corpo da função
end

Dentro da função, você pode acessar esses argumentos usando ... novamente. Para trabalhar com eles com mais facilidade, você pode agrupá-los em uma tabela usando chaves:

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

A expressão {...} cria uma tabela no estilo de lista contendo todos os argumentos passados para a função. Você pode então iterar por essa tabela como faria com qualquer outra, usando o operador de comprimento # ou ipairs().

challenge icon

Desafio

Fácil

Escreva uma função calculateAverage que aceite qualquer quantidade de argumentos numéricos e retorne a média deles.

Use a sintaxe variádica ... para aceitar uma quantidade flexível de argumentos, agrupá-los em uma tabela, calcular sua soma e dividi-la pela quantidade.

Observação: O código inicial (marcado como "Don't touch this code") lê números da entrada, converte cada um de texto para número usando tonumber() e os armazena em uma tabela chamada numbers. No final, ele chama sua função usando unpack(numbers), que espalha os valores da tabela como argumentos individuais, para que sua função os receba como .... Você não precisa modificar nem entender esse código em detalhes; apenas concentre-se em escrever calculateAverage.

Lógica:

  • Agrupe todos os argumentos em uma tabela usando {...}
  • Percorra a tabela para calcular a soma de todos os números
  • Divida a soma pela quantidade de argumentos para obter a média
  • Retorne a média como um número

Parâmetros:

  • ... (números): Quantidade variável de argumentos numéricos

Retorno: A média de todos os números fornecidos (número)

Experimente você mesmo

-- Não mexa neste 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(...)
    -- Escreva o código aqui
end

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

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de Lua online