Menu
Coddy logo textTech

Fonctions variadiques (...)

Fait partie de la section Logic & Flow du Journey Lua de Coddy — leçon 11 sur 54.

Parfois, vous avez besoin d'une fonction capable de travailler avec n'importe quel nombre d'arguments. Peut-être voulez-vous calculer la somme de deux nombres, ou trois, ou dix — sans écrire de fonctions distinctes pour chaque cas. Lua propose une syntaxe spéciale pour cela : les trois points ...

Lorsque vous placez ... dans la liste des paramètres d'une fonction, elle devient une fonction variadique qui accepte n'importe quel nombre 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 avec eux plus facilement, vous pouvez les regrouper dans une table en utilisant des 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))  -- Résultat : 30
print(sum(1, 2, 3, 4, 5))  -- Résultat : 15

L'expression {...} crée une table de type liste contenant tous les arguments passés à 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

Écrivez une fonction calculateAverage qui accepte n'importe quel nombre d'arguments numériques et retourne leur moyenne.

Utilisez la syntaxe variadique ... pour accepter un nombre flexible d'arguments, emballez-les dans une table, calculez leur somme et divisez par le nombre d'éléments.

Note : Le code de départ (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 nommée numbers. À la fin, il appelle votre fonction en utilisant unpack(numbers), ce qui déploie les valeurs de la table comme des arguments individuels — ainsi votre fonction les reçoit sous la forme .... Vous n'avez pas besoin de modifier ou de comprendre ce code en détail ; concentrez-vous simplement sur l'écriture de calculateAverage.

Logique :

  • Emballez tous les arguments dans une table en utilisant {...}
  • Parcourez la table pour calculer la somme de tous les nombres
  • Divisez la somme par le nombre d'arguments pour obtenir la moyenne
  • Retournez la moyenne sous forme de nombre

Paramètres :

  • ... (nombres) : Nombre variable d'arguments numériques

Retourne : La moyenne de tous les nombres fournis (nombre)

Aide-mémoire

Lua prend en charge les fonctions variadiques qui peuvent accepter n'importe quel nombre d'arguments en utilisant la syntaxe des trois points ... :

function sum(...)
    -- Corps de la fonction
end

À l'intérieur d'une fonction variadique, regroupez les arguments dans une table en utilisant {...} :

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 contenant tous les arguments. Vous pouvez la parcourir en utilisant l'opérateur de longueur # ou ipairs().

Essayez vous-même

-- Ne pas toucher à 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(...)
    -- Écrire 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 Logic & Flow