0Pricing
Lua Academy · Leçon

Les fonctions comme valeurs

Stockez et transmettez des fonctions.

Les fonctions comme valeurs est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Les fonctions sont des valeurs de première classe

En Lua, les fonctions sont des valeurs de première classe. Cela signifie qu'une fonction n'est qu'une donnée : vous pouvez la stocker dans une variable, la transmettre à une autre fonction, la renvoyer et la conserver dans une table.

Cette idée est au cœur de toute la programmation fonctionnelle. Dès que vous traitez les fonctions comme des nombres ou des chaînes de caractères, vous pouvez créer des outils souples et réutilisables.

Stocker une fonction dans une variable

Le nom que vous donnez à une fonction est en réalité une variable qui contient la valeur de cette fonction. Vous pouvez librement affecter cette valeur à une autre variable.

Les deux noms ci-dessous désignent la même fonction sous-jacente : appeler l'un ou l'autre exécute donc le même code.

local function greet(name)
  return "Hello, " .. name
end

local hi = greet
print(greet("Ada"))
print(hi("Lin"))

Les fonctions anonymes

Vous n'avez pas besoin d'un nom pour créer une fonction. Une fonction anonyme s'écrit avec la syntaxe function ... end et s'utilise directement comme une valeur.

Affecter une telle fonction à une variable locale revient au même qu'une définition de fonction classique, mais écrite directement à cet endroit.

local square = function(x)
  return x * x
end

print(square(5))
print(square(9))

Les fonctions comme arguments

Comme les fonctions sont des valeurs, vous pouvez les transmettre à d'autres fonctions. Une fonction qui en reçoit une autre est appelée fonction d'ordre supérieur.

Ici, apply ne sait pas quel travail effectuer tant que vous ne lui avez pas fourni une fonction à exécuter.

local function apply(f, x)
  return f(x)
end

local function double(n) return n * 2 end

print(apply(double, 10))
print(apply(function(n) return n + 1 end, 10))

Renvoyer une fonction

Une fonction peut en renvoyer une autre. Vous pouvez ainsi créer des fonctions à la demande, configurées par les arguments que vous avez transmis.

Ci-dessous, multiplier construit une toute nouvelle fonction à chaque appel et mémorise le facteur que vous lui avez fourni.

local function multiplier(factor)
  return function(x)
    return x * factor
  end
end

local triple = multiplier(3)
print(triple(4))
print(multiplier(10)(5))

Les fermetures capturent des variables

Lorsqu'une fonction renvoyée utilise une variable locale de la fonction qui l'englobe, elle capture cette variable. L'ensemble formé par la fonction et les variables capturées s'appelle une fermeture.

La variable factor capturée reste accessible aussi longtemps que la fermeture existe, même après la fin de l'appel externe.

local function counter()
  local n = 0
  return function()
    n = n + 1
    return n
  end
end

local next = counter()
print(next())
print(next())
print(next())

Des fonctions dans des tables

Les tables peuvent contenir des fonctions comme n'importe quelle autre valeur. C'est ainsi que Lua construit des modules et des objets : une table associe des noms à des valeurs fonctionnelles.

Vous pouvez rechercher une fonction à l'aide d'une clé et l'appeler, ou même parcourir une table d'opérations.

local ops = {
  add = function(a, b) return a + b end,
  sub = function(a, b) return a - b end
}

print(ops.add(2, 3))
print(ops["sub"](9, 4))

Une table de stratégies

Stocker des fonctions dans une table vous permet de choisir le comportement à l'exécution à l'aide d'une clé. Cela remplace les longues suites de conditions si-sinon par une recherche claire.

Choisir l'opération par son nom garde le code appelant court et facilite l'ajout de nouvelles clés.

local dispatch = {
  upper = string.upper,
  lower = string.lower,
  rev = string.reverse
}

local function run(name, s)
  return dispatch[name](s)
end

print(run("upper", "lua"))
print(run("rev", "lua"))

Les fonctions de rappel

Une fonction de rappel est une fonction que vous transmettez afin de pouvoir l'appeler plus tard. La bibliothèque standard de Lua utilise ce modèle ; par exemple, table.sort reçoit une fonction de comparaison.

La fonction de rappel définit la règle, tandis que la bibliothèque s'occupe de parcourir et de réorganiser les éléments.

local nums = {5, 2, 9, 1}
table.sort(nums, function(a, b)
  return a > b
end)

print(table.concat(nums, ", "))

Les fonctions ont une identité

Chaque valeur fonctionnelle est un objet distinct. Deux littéraux de fonction distincts ne sont jamais égaux, même s'ils contiennent le même code.

En revanche, une même fonction stockée dans deux variables est considérée comme égale à elle-même, car les deux noms désignent la même valeur.

local f = function() return 1 end
local g = function() return 1 end
local h = f

print(f == g)
print(f == h)

Pourquoi est-ce important

Traiter les fonctions comme des valeurs vous permet d'écrire une seule fois des outils génériques et de les personnaliser avec les fonctions que vous leur transmettez. La transformation, le filtrage, l'application partielle et la composition reposent tous sur ce principe.

La suite de ce cours s'appuie sur les fonctions de première classe et les fermetures pour construire des modèles pratiques.

Vérification rapide

Vérifiez votre compréhension des fonctions de première classe en Lua.

Récapitulatif

En Lua, les fonctions sont des valeurs de première classe : stockez-les dans des variables et des tables, transmettez-les comme arguments et renvoyez-les depuis d'autres fonctions.

Renvoyer une fonction qui capture des variables locales de la fonction englobante crée une fermeture. Ces idées sont à la base de tous les modèles fonctionnels à venir.

Questions Fréquemment Posées

La leçon « Les fonctions comme valeurs » est-elle gratuite ?

Oui — le texte complet de « Les fonctions comme valeurs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Les fonctions comme valeurs » ?

Stockez et transmettez des fonctions. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Les fonctions comme valeurs » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Les fonctions comme valeurs
  2. map, filter, reduce
  3. Application partielle
  4. Composer des fonctions
← Retour à Lua Academy