Fonctions variadiques (...)
Fait partie de la section Logique et flux du Journey Lua de Coddy. Leçon 11 sur 54.
Parfois, vous avez besoin d’une fonction capable de fonctionner avec un nombre quelconque d’arguments. Vous voulez peut-être calculer la somme de deux nombres, ou de trois, ou de dix, sans écrire de fonctions distinctes pour chaque cas. Lua fournit une syntaxe spéciale pour cela : les trois points ...
Lorsque vous placez ... dans la liste des paramètres d’une fonction, celle-ci devient une fonction variadique qui accepte un nombre quelconque d’arguments :
function sum(...)
-- Corps de la fonction
endÀ l’intérieur de la fonction, vous pouvez accéder à ces arguments en utilisant à nouveau .... Pour travailler plus facilement avec eux, vous pouvez les regrouper dans une table à l’aide d’accolades :
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)) -- Sortie : 30
print(sum(1, 2, 3, 4, 5)) -- Sortie : 15L’expression {...} crée une table de type liste contenant tous les arguments transmis à la fonction. Vous pouvez ensuite parcourir cette table comme n’importe quelle autre, en utilisant l’opérateur de longueur # ou ipairs().
Défi
FacileÉcris une fonction calculateAverage qui accepte un nombre quelconque d’arguments numériques et renvoie leur moyenne.
Utilise la syntaxe variadique ... pour accepter un nombre flexible d’arguments, les regrouper dans une table, calculer leur somme et la diviser par leur nombre.
Remarque : Le code de démarrage (marqué « Don't touch this code ») lit des nombres à partir de l’entrée, convertit chacun d’eux du texte en nombre à l’aide de tonumber() et les stocke dans une table appelée numbers. À la fin, il appelle ta fonction avec unpack(numbers), ce qui transmet les valeurs de la table comme arguments individuels, de sorte que ta fonction les reçoit sous la forme .... Tu n’as pas besoin de modifier ou de comprendre ce code en détail : concentre-toi simplement sur l’écriture de calculateAverage.
Logique :
- Regrouper tous les arguments dans une table à l’aide de
{...} - Parcourir la table pour calculer la somme de tous les nombres
- Diviser la somme par le nombre d’arguments pour obtenir la moyenne
- Renvoyer la moyenne sous forme de nombre
Paramètres :
...(nombres) : Nombre variable d’arguments numériques
Renvoie : La moyenne de tous les nombres fournis (nombre)
Essayez vous-même
-- Ne touchez pas à ce code --
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(...)
-- Écrivez le code ici
end
local average = calculateAverage(unpack(numbers))
print("Average: " .. average)
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