Menu
Coddy logo textTech

Qu’est-ce qu’une fermeture ?

Fait partie de la section Logique et flux du Journey Lua de Coddy. Leçon 14 sur 54.

Vous avez appris que les fonctions peuvent être stockées dans des variables, passées comme arguments et renvoyées par d'autres fonctions. Nous allons maintenant explorer l'une des conséquences les plus puissantes de cela : les clôtures.

Une fermeture se produit lorsqu’une fonction imbriquée « se souvient » des variables locales de la fonction qui l’englobe, même après que cette fonction externe a fini de s’exécuter. Cela peut sembler étrange au début : comment une variable peut-elle encore exister après que la fonction qui l’a créée a terminé son exécution ?

Voici un exemple simple qui illustre ce concept :

function createCounter()
    local count = 0
    
    return function()
        count = count + 1
        return count
    end
end

local counter = createCounter()
print(counter())  -- Sortie : 1
print(counter())  -- Sortie : 2
print(counter())  -- Sortie : 3

Lorsque createCounter() est appelée, elle crée une variable locale count et renvoie une fonction anonyme. Normalement, vous vous attendriez à ce que count disparaisse une fois que createCounter() a terminé. Mais la fonction renvoyée a toujours accès à count. Elle « capture » cette variable.

Chaque fois que vous appelez counter(), cette fonction accède à la même variable count, créée lors de la première exécution de createCounter(), et la modifie. La fonction interne emporte son environnement avec elle, préservant ainsi l’état entre les appels.

challenge icon

Défi

Facile

Écrivez une fonction createMultiplier qui crée une fonction multiplicatrice avec un facteur spécifique, puis l’utilise immédiatement pour multiplier un nombre donné.

Logique :

  • Créez une fonction imbriquée à l’intérieur de createMultiplier qui prend un paramètre numérique
  • La fonction imbriquée doit multiplier son paramètre par le factor de la fonction externe
  • La fonction imbriquée formera une fermeture, en mémorisant la valeur de factor
  • Appelez la fonction multiplicatrice avec le paramètre number et renvoyez le résultat

Paramètres :

  • factor (nombre) : la valeur du multiplicateur
  • number (nombre) : le nombre à multiplier

Renvoie :

  • Le résultat de la multiplication de number par factor (nombre)

Essayez vous-même

function createMultiplier(factor, number)
    local multiply = function(x)
        return x * factor
    end
    
    -- Utilisez la fonction multiply ci-dessous

end
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