Menu
Coddy logo textTech

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 : 15

L’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().

challenge icon

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)

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