Menu
Coddy logo textTech

Funzioni variadiche (...)

Fa parte della sezione Logica e flusso del percorso Lua di Coddy. Lezione 11 di 54.

A volte hai bisogno di una funzione che possa funzionare con un numero qualsiasi di argomenti. Magari vuoi calcolare la somma di due numeri, o tre, o dieci, senza scrivere funzioni separate per ogni caso. Lua fornisce una sintassi speciale per questo: i tre puntini ...

Quando inserisci ... nell'elenco dei parametri di una funzione, questa diventa una funzione variadica che accetta un numero qualsiasi di argomenti:

function sum(...)
    -- Corpo della funzione
end

All'interno della funzione, puoi accedere a questi argomenti usando di nuovo .... Per lavorarci più facilmente, puoi inserirli in una tabella usando le parentesi graffe:

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

L’espressione {...} crea una tabella in stile lista contenente tutti gli argomenti passati alla funzione. Puoi quindi scorrere questa tabella proprio come qualsiasi altra, usando l’operatore di lunghezza # o ipairs().

challenge icon

Sfida

Facile

Scrivi una funzione calculateAverage che accetti un numero qualsiasi di argomenti numerici e ne restituisca la media.

Usa la sintassi variadica ... per accettare un numero flessibile di argomenti, inserirli in una tabella, calcolarne la somma e dividerla per il conteggio.

Nota: Il codice iniziale (contrassegnato da "Don't touch this code") legge i numeri dall'input, converte ciascuno da testo a numero usando tonumber() e li memorizza in una tabella chiamata numbers. Alla fine, chiama la tua funzione usando unpack(numbers), che passa i valori della tabella come argomenti individuali, così la tua funzione li riceve come .... Non devi modificare né comprendere nel dettaglio questo codice; concentrati solo sulla scrittura di calculateAverage.

Logica:

  • Inserisci tutti gli argomenti in una tabella usando {...}
  • Itera attraverso la tabella per calcolare la somma di tutti i numeri
  • Dividi la somma per il numero di argomenti per ottenere la media
  • Restituisci la media come numero

Parametri:

  • ... (numeri): numero variabile di argomenti numerici

Restituisce: La media di tutti i numeri forniti (numero)

Provalo tu

-- Non modificare questo codice --
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(...)
    -- Scrivi il codice qui
end

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

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Lua online