Les fonctions te permettent de regrouper un bloc de code réutilisable : au lieu de réécrire la même logique dix fois, tu l'écris une fois et tu l'appelles. Les tables, elles, stockent des collections de données : une liste d'ennemis, un inventaire, les statistiques d'un joueur. Ensemble, elles forment l'ossature de tout jeu un peu sérieux.
En Luau, les tables servent à la fois d'arrays (listes ordonnées, parcourues avec ipairs) et de dictionnaires (paires clé-valeur, parcourues avec pairs). Comprendre quand utiliser l'un ou l'autre, et comment passer des données à une fonction via ses paramètres, débloque la quasi-totalité de la logique de gameplay.
-- Syntaxe classique
local function direBonjour(nom)
print("Bonjour, " .. nom)
end
-- Syntaxe variable
local direBonjour = function(nom)
print("Bonjour, " .. nom)
end
direBonjour("Roblox") -- appellocal function addition(a, b)
return a + b
end
local resultat = addition(10, 5)
print(resultat) -- 15
-- Retours multiples
local function minMax(t)
return math.min(table.unpack(t)),
math.max(table.unpack(t))
end
local min, max = minMax({3,1,5,2})local score = 100 -- portée : fichier
local function addPoints(n)
local bonus = 10 -- portée : fonction
score = score + n + bonus
end
-- ❌ bonus inaccessible ici
-- ✅ score accessible icilocal — les globales "fuient" dans tous les scripts !local fruits = {"pomme", "banane", "kiwi"}
-- Index commence à 1 !
print(fruits[1]) -- "pomme"
print(#fruits) -- 3 (longueur)
-- Ajouter / supprimer
table.insert(fruits, "mangue") -- fin
table.insert(fruits, 2, "fraise") -- position 2
table.remove(fruits, 1) -- retire index 1
-- Parcourir avec ipairs
for i, fruit in ipairs(fruits) do
print(i, fruit)
endlocal joueur = {
nom = "Alex",
score = 250,
actif = true
}
print(joueur.nom) -- "Alex"
print(joueur["score"]) -- 250
joueur.score = 300 -- modifier
joueur.niveau = 5 -- ajouter
joueur.actif = nil -- supprimer
-- Parcourir avec pairs
for cle, val in pairs(joueur) do
print(cle, val)
endlocal equipe = {
{ nom = "Alex", pts = 120 },
{ nom = "Maria", pts = 95 },
{ nom = "Tom", pts = 200 },
}
print(equipe[1].nom) -- "Alex"
print(equipe[3].pts) -- 200
for _, p in ipairs(equipe) do
print(p.nom .. ": " .. p.pts .. " pts")
endlocal scores = {42, 17, 99, 55}
table.sort(scores) -- tri croissant : {17, 42, 55, 99}
table.sort(scores, function(a,b) return a > b end) -- décroissant
table.concat(scores, ", ") -- "17, 42, 55, 99" (array de strings)
-- Copie superficielle (table.clone Luau)
local copie = table.clone(scores)
-- Vérifier si une valeur existe
local function contient(t, val)
for _, v in ipairs(t) do
if v == val then return true end
end
return false
endipairs pour les listes ordonnées, pairs pour les dictionnaires : ipairs s'arrête au premier trou dans les index.return plutôt que de modifier une variable globale : ta fonction devient prévisible et testable.