Guide pratique du langage informatique Lua

Image logo
Cette page est une « feuille volante ».
Prière de la rattacher à une leçon, une leçon du jour ou un travail de recherche, par exemple Introduction au Lua. En cas de doute, discutez-en (juin 2022).
======================================= base du langage informatique Lua

local x = 1
local y = 10
math.random() -- Retourne sans argument, un nombre aléatoire entre 0 et 1
math.random(x, y))-- Retourne avec les arguments x et y un nombre aléatoire entre x et y

print(texte) -- permet d'écrire sur la console c'est à dire l'écran de l'ordinateur
false or nil -- donne nil
+ - * % == > < <= >= -- ces opérations mathématiques de base entre 2 valeurs valent soit false soit true
~= -- à peu près égal à
a % b == a - math.floor(a/b)*b

function mafonction(arg1, arg2, ...)
	-- code cette partie définit précisément le fonctionnement de la fonction. exemple
	local i = 1
	local t = ""
	if arg1 then t = t + "," + tostring(arg1)
	if arg2 then t = t + "," + tostring(arg2)
	-- dans ce cas simple on ajoute le texte des 2 arguments, séparés par des virgules à la variable de sortie t
	return t
end

table = { 5, "foo", 123 } -- déclaration de table à indices automatique
table[1] = 5 -- valeur de l'argument 1
table[2] = "foo" -- valeur de l'argument 2
table[3] = 123 -- valeur de l'argument 3
local taille = table.getn(TABLE) -- donne la taille de la table TABLE
local t = ""
local tableau = {"un", "renard", "caché", "dans", 1, "arbre"} -- exemple de tableau
for i, v in pairs(tableau) do
    t =  t = t + tostring(v) -- concatène les éléments du tableau mis au format texte ce qui donne texte="unrenardcachédans1arbre"
end
local concatTableau = table.concat(tableau, "X") -- ajoute le séparateur ici "X" entre les éléments du tableau ce qui donne texte="unXrenardXcachéXdansX1Xarbre"
-- fonctions de base du système
os.date() -- donne la date et l'heure comme jeudi mars 12 14:52:59 2021
os.time() -- donne le nombre de secondes entre le 1er janvier 1970 à 00:00 et la seconde de l’appel
os.clock() -- donne le temps écoulé en seconde depuis que Lua a été lancé comme 853312.913685
pairs(x) -- permet de chercher différents éléments d'un tableau
string(v) -- convertit la valeur en texte
type(x) -- donne le type de x (entier, string(=texte), "nil" si x n'existe pas, "function", "boolean" si x est une booléen(0 ou 1 seulement), "function" pour les fonctions, "number" pour les nombres)
for i, x in pairs(table) do -- i est l'index de la table et x ses éléments. on peut en faire ce qu'on veut
local _, x, _, _, y, z = NomDeVotreFonction()-- permet de utiliser seulement x, y et z
pcall(code) -- permet soit
-- de limiter l'appel d'un code contre un un bouclage infini
-- de tester du code de diverses manières
if condition1 then 
 -- code si condition1
elseif condition2 then
 -- code si condition2
else
 -- code si ni 1 ni 2
end

repeat
 -- code
until condition -- cette condition est la seule qui permet de sortir de la boucle
-- en cas de doute utiliser pcall(code)
while condition do -- boucle tant que la condition est vrai
 -- code
end
for var = start, valend, step do
-- var commence avec la valeur start
-- var change par : var = var + step à chaque tour
-- var finit a la valeur=valend
-- à l'intérieur de la boucle for il peut y avoir des interactions entre les variables
-- ce qui peut changer beaucoup le fonctionnement, le déroulement et les interactions
end
======================================= math
local y=math.abs(x) -- retourne la valeur absolue de x. si x est négatif comme -45 alors y=45
math.acos(cos) -- retourne l'angle en radian du cosinus de cos
math.asin(sin) -- retourne l'angle en radian du sinus de sin
local y = math.exp(x) -- retourne e à la puissance x ( e=2,71828 environ) 
local y = math.ceil(x) -- retourne le plus petit entier plus grand ou égal à x. exemple y=45 si x=45.2
local y = math.floor(10,80)) -- retourne le nombre entier immédiatement inférieur à. N  exemple y=45 si x=44.8
math.max(5,66,7,257,99) --retourne le plus petit nombre contenu dans une liste ici 7
math.min(5,66,7,257,99) --retourne le plus grand nombre contenu dans une liste ici 257
math.pow(6,8) -- Retourne la puissance 8 de 6 soit le nombre 6x6x6x6x6x6x6x6=1679616
math.sqrt(x) -- retourne la racine carrée de x=math.sqrt(25) = 5
math.random(14, 25)) --> donne un nombre entier aléatoire ici entre 14 et 25
math.sin(x) -- retourne le sinus de x
math.sinh(x) -- retourne le sinus hyperbolique de x
math.tan(x) -- retourne la tangente de x
math.tanh(x) -- retourne la tangente hyperbolique de x
math.sqrt(x) -- retourne la racine carrée de x (9 si x=81)
local rad = math.deg(degre) -- retourne la valeur en radians de sa valeur en degré. exemple pi/2 pour 90 degrés
math.ldexp(x, p) -- retourne x multiplié par le puissance p de 2. Exemple si p=3 la puissance de 2 est 8 et si x = 5 le résultat est 40
math.log(x [, base]) -- retourne le logarithme de x avec le base 10 usuelle ou avec la base demandée
math.min(6,11,9,5,11) -- retourne le plus petit des nombres en paramètres, ici 5
math.max(4,6,7,9,1) -- retourne le plus grand des nombres en paramètres, ici 9
math.min(4,6,7,9,1) -- retourne le plus petit des nombres en paramètres, ici 1
math.pi = 3.1415 926 535 897 932 384 .10 000 décimales selon http://serge.mehl.free.fr/anx/pi10000.html
local e = 2,718 281 828 459 045 235 360 287 4713 526 624 9775 724... -- e est connu depuis 2018 avec 8 000 milliards de décimales
--selon https://www.maths-et-tiques.fr/index.php/histoire-des-maths/nombres/le-nombre-e = m@aths et tiques
math.pi = 3.1415 926 535 897 932 384 6264 3383 279 502 884 197 169 399 375 105 820 974 944 592 307 816 406..-- pi est connu 10 000 décimales
-- selon http://serge.mehl.free.fr/anx/pi10000.html
local e = 2,718 281 828 459 045 235 360 287 4713 526 624 9775 724... --selon https://www.maths-et-tiques.fr/index.php/histoire-des-maths/nombres/le-nombre-e = m@aths et tiques
math.pow(n,p) -- Retourne la puissance p du nombre n comme 5 puissance 2 = 25
local radians = math.rad(degrés) -- convertit les degrés en radians
math.random(x, y)-- Retourne un nombre aléatoire entre x et y
math.sin(x) -- retourne le sinus de x
local r = math.sqrt(x) -- retourne la racine carrée de x = r * r
local tangente = math.tan(a) -- retourne la tangente de l'angle a
local sinushyperbolique = math.sinh(x) -- retourne le sinus hyperbolique de x

======================================= string

string.byte(texte, y, z) -- permet de retourner le code ASCII des caractères du texte
-- ASCII signifie American Standard Code for Information Interchange (les majuscules seulement)
local ASCII = string.byte("exemple") -- retourne un texte composé des codes ASCII de l'argument texte
-- ici pour ces caractères : e = "65", x = "78", e = "65", m = "6D", p = "70", e = "65", soit ASCII = "6578656D7065" d'après la table des codes ASCII
local car = string.char(ASCII) -- convertit le code ASCII d'un caractère normal en ce caractère
string.format("Je suis %s, j'adore les %s, et j'aime le nombre %i", "gentil", "bananes", 3)) -- retourne par exemple : Je suis gentil, j'adore les bananes, et j'en ai mangé 3
string.find(texte, lettre) -- permet de rechercher dans le texte la lettre et renvoie true = vrai si elle y est
string.gsub(texte, avant, apres) -- permet de remplacer les mots avant du texte en mots après
string.gsub("je vais promener", "promener", "chanter")-- dans cet exemple le texte final est "je vais chanter"
string.upper("je vais promener") -- donne le même texte mais en majuscule ici "JE VAIS PROMENER"
string.lower("JE VAIS PROMENER") -- donne le même texte mais en minuscules ici "je vais promener"
string.reverse("texte") -- retourne le texte dans l'ordre inversé des lettres. ici "etxet" pour "texte"
string.rep(texte, n) -- retourne le texte répété n fois exemple : si texte=oui et n=3 le texte final est "ouiouioui"
string.match(texte, modele, n) -- extrait du texte, à partir de n non nul ou de 1, comme le modèle et de même longueur

======================================= table

table.insert(x, y, z) -- permet d'insérer une valeur y dans un tableau x à la position z ou à la fin
local tableau = {"je", "suis", "un", "faux", "utilisateur"}
table.remove(tableau, 4) --> dans cet exemple l'élément 4="faux" du tableau est supprimé
local tableau = {6, 4, 5, 3, 2, 1}
local nombres = table.sort(tableau) -- le tableau est trié par ordre croissant des valeurs. Exemple nombres = 1, 2, 3, 5, 15, 77
local textes = table.sort(tableau) -- le tableau est trié par ordre croissant des textes. Exemple textes = "deux", "long", "poire", "trois"
table.sort(tableau) -- trie le tableau dans l'ordre croissant des valeurs. exemple {1, 2, 3, 4, 5, 6}
local concatTableau = table.concat(tableau) -- concatène les textes et renvoie unrenardcachédans1arbre si tableau = {"un", "renard", "caché", "dans", 1, "arbre"}
local concatTableau = table.concat(tableau, " | ") -- ajoute le séparateur entre les éléments du tableau comme : un | renard | caché | dans | 1 | arbre
-- La fonction math.min(liste) retourne le plus petit nombre contenu dans une liste
-- table
local total = 0
local liste = "liste : "
for i, v in pairs(x) do
	total = total + v
	liste = liste + string(v)+","
end -- ici Total est l'addition des valeurs. total est le total des valeurs du tableau et liste la liste de leurs valeurs séparées par des virgules