Un bloc commence par then ou do et se termine par end.
if … then … elseif … then … else … end.
Différent s'écrit ~= ; on combine avec and, or, not.
Seuls false et nil sont faux ; 0 et "" sont vrais.
for i = début, fin, pas do ; while condition do. Pas de += ni ++.
Mémo
if vie <= 0 then
print("Game over")
elseif vie < 50 then
print("Blessé")
else
print("OK")
end
for i = 1, 10 do print(i) end
for i = 10, 0, -2 do print(i) end
while n > 0 do
n = n - 1
end
Pièges à éviter
Écrire != au lieu de ~=.
Écrire else if en deux mots : il faut alors un end de plus.
Une table sert de liste ({ "a", "b" }) ou de fiche avec des clés ({ pseudo = "Skap" }).
Les listes commencent à l'indice 1 ; #liste donne la longueur ; table.insert ajoute.
On lit une clé avec t.cle ou t["cle"] ; une clé absente vaut nil.
ipairs parcourt une liste dans l'ordre ; pairs parcourt toutes les clés (ordre non garanti).
Mémo
local armes = { "pistolet", "fusil" }
print(armes[1], #armes)
table.insert(armes, "couteau")
local joueur = { pseudo = "Skap", argent = 2500 }
joueur.metier = "pompier"
for i, a in ipairs(armes) do print(i, a) end
for k, v in pairs(joueur) do print(k, tostring(v)) end
local function nom(params) … end ; return renvoie le résultat.
Un paramètre non fourni vaut nil.
Une fonction peut renvoyer plusieurs valeurs : local a, b = f().
Une fonction est une valeur : on peut la passer en paramètre (fonction anonyme).
Un module renvoie une table de fonctions ; on le charge avec require("nom").
Mémo
local function soigner(vie, soin)
return math.min(100, vie + soin)
end
local petit, grand = minMax(8, 3)
repeter(3, function(n) print(n) end)
-- outils.lua
local outils = {}
function outils.doubler(n) return n * 2 end
return outils
-- main.lua
local outils = require("outils")
Un inventaire est une table dont les clés sont les objets et les valeurs les quantités.
(t[cle] or 0) donne 0 quand la clé n'existe pas encore.
pairs parcourt toutes les clés d'une table.
Mémo
local inventaire = {}
local function ajouter(objet, n)
inventaire[objet] = (inventaire[objet] or 0) + n
end
for objet, n in pairs(inventaire) do print(objet .. " x" .. n) end