Menu
CoddyTech

Fonctions anonymes

Fait partie de la section Logique et flux du Journey Lua de Coddy. Leçon 13 sur 54.

Maintenant que tu comprends que les fonctions peuvent être stockées dans des variables et transmises, il existe une manière encore plus concise de les écrire. Au lieu de toujours donner un nom à une fonction, tu peux la créer directement là où tu en as besoin. On les appelle des fonctions anonymes.

Une fonction anonyme est simplement une fonction sans nom. Tu la définis à l’aide du mot-clé function, suivi immédiatement de ses paramètres et de son corps :

function(a, b)
    return a + b
end

Cela crée une valeur de fonction qui peut être utilisée immédiatement. Les fonctions anonymes sont particulièrement utiles lorsqu’on passe des fonctions comme arguments à d’autres fonctions. Tu te souviens de l’exemple de tri personnalisé vu précédemment ? Voici à quoi il ressemble avec une fonction anonyme :

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)

Au lieu de définir une fonction nommée distincte pour la comparaison, la fonction est créée directement comme deuxième argument de table.sort(). Cela rend le code plus compact et garde la logique de tri là où elle est utilisée.

challenge icon

Défi

Facile

Écris une fonction filterByThreshold qui prend numbers et threshold et renvoie une nouvelle table contenant uniquement les nombres supérieurs au seuil.

L’éditeur contient déjà une fonction auxiliaire, filter(list, keep) : elle appelle keep(value) pour chaque valeur et renvoie une nouvelle table contenant les valeurs pour lesquelles keep a renvoyé true. Appelle filter et passe le test sous la forme d’une fonction anonyme écrite directement dans l’appel, comme dans la leçon où une fonction est passée à table.sort(). Ne stocke pas le test dans une variable et ne lui donne pas de nom.

Paramètres :

  • numbers (table) : Une table de type liste contenant des valeurs numériques
  • threshold (number) : La valeur minimale (exclusive) pour le filtrage

Renvoie : Une table contenant uniquement les nombres supérieurs au seuil (table)

Essayez vous-même

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)
    -- Écrivez le code ici
end
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et flux

Entraînez-vous par vous-même : Compilateur Lua en ligne