Cours

Lua Leçon 4

Les fonctions

Regrouper du code réutilisable, avec des paramètres et une ou plusieurs valeurs de retour.

20 min

À la fin de cette leçon, tu sauras

  • Déclarer une fonction locale
  • Renvoyer une ou plusieurs valeurs
  • Passer une fonction en paramètre

Déclarer une fonction

local function saluer(prenom)
    print("Bonjour " .. prenom .. " !")
end

local function ajouterArgent(solde, montant)
    return solde + montant
end

saluer("Léa")
local nouveau = ajouterArgent(100, 50)   -- 150

Comme pour les variables, on écrit local function. return renvoie le résultat. Si on appelle une fonction avec moins d'arguments que prévu, les paramètres manquants valent nil.

Plusieurs valeurs de retour

Particularité de Lua : une fonction peut renvoyer plusieurs valeurs d'un coup.

local function minMax(a, b)
    if a < b then
        return a, b
    end
    return b, a
end

local petit, grand = minMax(8, 3)
print(petit, grand)   -- 3   8

Une fonction en paramètre

En Lua, une fonction est une valeur comme une autre : on peut la ranger dans une variable ou la donner à une autre fonction. C'est ce qui permet de réagir aux événements d'un jeu, comme on le verra dans la leçon suivante.

local function repeter(fois, action)
    for i = 1, fois do
        action(i)
    end
end

repeter(3, function(n)
    print("Appel numéro " .. n)
end)

Astuce : une fonction écrite directement à l'endroit où on l'utilise, sans nom, s'appelle une fonction anonyme.

À toi de jouer

Écris une fonction locale soigner qui prend deux paramètres, vie et soin, et qui renvoie la nouvelle vie, sans dépasser 100. Indice : math.min(100, vie + soin) renvoie le plus petit des deux nombres. Affiche ensuite le résultat de soigner(80, 30).

main.lua
  • Une fonction locale soigner(vie, soin) est déclarée
  • Elle renvoie une valeur avec return
  • La vie ne dépasse pas 100
  • Le résultat de soigner(80, 30) est affiché
  • La fonction est fermée par end
Bloqué ? Voir une solution
local function soigner(vie, soin)
    return math.min(100, vie + soin)
end

print(soigner(80, 30))

Quiz

1Que renvoie une fonction Lua sans return ?
2Que vaut b après local a, b = f() si f fait return 1, 2 ?
3Qu'est-ce qu'une fonction anonyme ?