Menu
CoddyTech

Funzioni anonime

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

Ora che hai capito che le funzioni possono essere memorizzate in variabili e passate da una parte all’altra, c’è un modo ancora più conciso per scriverle. Invece di assegnare sempre un nome a una funzione, puoi crearla direttamente dove ti serve. Si chiamano funzioni anonime.

Una funzione anonima è semplicemente una funzione senza nome. La definisci usando la parola chiave function, seguita immediatamente dai suoi parametri e dal corpo:

function(a, b)
    return a + b
end

Questo crea un valore funzione che può essere usato subito. Le funzioni anonime sono particolarmente utili quando si passano funzioni come argomenti ad altre funzioni. Ricordi l’esempio di ordinamento personalizzato di prima? Ecco come appare con una funzione anonima:

local players = {
    {name = "Alice", score = 150},
    {name = "Bob", score = 200},
    {name = "Charlie", score = 175}
}

table.sort(players, function(a, b)
    return a.score > b.score
end)

Invece di definire una funzione con nome separata per il confronto, la funzione viene creata direttamente come secondo argomento di table.sort(). Questo rende il codice più compatto e mantiene la logica di ordinamento proprio nel punto in cui viene usata.

challenge icon

Sfida

Facile

Scrivi una funzione filterByThreshold che accetta numbers e threshold e restituisce una nuova tabella contenente solo i numeri maggiori della soglia.

L'editor contiene già una funzione di supporto, filter(list, keep): chiama keep(value) per ogni valore e restituisce una nuova tabella con i valori per i quali keep ha restituito true. Chiama filter e passa il controllo come funzione anonima scritta direttamente nella chiamata, come nella lezione quando ne passa una a table.sort(). Non memorizzare il controllo in una variabile e non assegnargli un nome.

Parametri:

  • numbers (table): Una tabella in stile lista contenente valori numerici
  • threshold (number): Il valore minimo (escluso) per il filtraggio

Restituisce: Una tabella contenente solo i numeri maggiori della soglia (table)

Provalo tu

local function filter(list, keep)
    local result = {}
    for _, value in ipairs(list) do
        if keep(value) then
            table.insert(result, value)
        end
    end
    return result
end

function filterByThreshold(numbers, threshold)
    -- Scrivi il codice qui
end
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