Fonctions anonymes
Fait partie de la section Logic & Flow du Journey Lua de Coddy — leçon 13 sur 54.
Maintenant que vous comprenez 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, vous pouvez la créer directement là où vous en avez besoin — on les appelle des fonctions anonymes.
Une fonction anonyme est simplement une fonction sans nom. Vous la définissez en utilisant le 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 lors du passage de fonctions en tant qu'arguments à d'autres fonctions. Vous souvenez-vous de l'exemple de tri personnalisé de tout à l'heure ? Voici à quoi cela 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 en tant que second argument de table.sort(). Cela rend le code plus compact et maintient la logique de tri là où elle est utilisée.
Défi
FacileÉcrivez une fonction filterByThreshold qui prend numbers et threshold et renvoie une nouvelle table contenant uniquement les nombres supérieurs au seuil.
Utilisez table.insert() avec une approche de fonction anonyme pour filtrer les nombres. Créez la logique de filtrage en ligne sans définir de fonction nommée séparée.
Logique :
- Créer une table de résultat vide
- Parcourir la table des nombres
- Pour chaque nombre, utiliser une fonction anonyme pour vérifier s'il dépasse le seuil
- Si la vérification renvoie vrai, ajouter le nombre à la table de résultat
- Renvoyer la table de résultat filtrée
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)
Aide-mémoire
Une fonction anonyme est une fonction sans nom, définie à l'aide du mot-clé function suivi des paramètres et du corps :
function(a, b)
return a + b
endLes fonctions anonymes sont utiles lors du passage de fonctions en tant qu'arguments, permettant de garder la logique en ligne là où elle est utilisée :
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)Cela crée la fonction de comparaison directement en tant qu'argument de table.sort(), rendant le code plus compact.
Essayez vous-même
function filterByThreshold(numbers, threshold)
-- Écrire 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 Logic & Flow
1Itération avancée des tables
Itérer avec pairs()Itérer avec ipairs()pairs() vs. ipairs()Récapitulatif - Fiche de personnage2Plus de fonctions de la bibliothèque table
table.concat()Construction de table & unpack()table.sort()Tri personnalisé avec des fonctionsRécapitulatif - Tableau des scores3Concepts avancés sur les fonctions
Retourner plusieurs valeursFonctions variadiques (...)Les fonctions comme valeurs de première classeFonctions anonymesQu'est-ce qu'une closure ?Récapitulatif - Gestionnaire d'événements simple