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
endCela 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.
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ériquesthreshold(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
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
1Itération avancée des tables
Itérer avec pairs()Itérer avec ipairs()pairs() contre ipairs()Récapitulatif - Fiche de personnage2Fonctions supplémentaires de la bibliothèque table
table.concat()construction de tables et unpack()table.sort()Tri personnalisé avec des fonctionsRécapitulatif - Tableau des meilleurs scores3Concepts avancés des fonctions
Retourner plusieurs valeursFonctions variadiques (...)Les fonctions comme valeurs de première classeFonctions anonymesQu’est-ce qu’une fermeture ?Récapitulatif - Gestionnaire d’événements simpleEntraînez-vous par vous-même : Compilateur Lua en ligne