LUA


LUA

Lua

Lua.JPG

Apparu en 1993
Auteur Luiz Henrique de Figueiredo, Roberto Ierusalimschy et Waldemar Celes
Implémentations Lua, LuaJIT, LLVM-Lua, LuaCLR, Nua, Lua Alchemy
Système d'exploitation Multiplate-forme
Licence Licence MIT
Site Web lua.org

Lua est un langage de script libre, réflexif, impératif et fonctionnel. Créé en 1993, il est conçu de manière à pouvoir être embarqué au sein d'autres applications afin d'étendre celles-ci, comme en témoigne la compacité de son interpréteur (95 à 185 Ko pour la version 5.0.2, selon le compilateur utilisé et le système cible). Lua (qui signifie lune en portugais) a été développé par Luiz Henrique de Figueiredo, Roberto Ierusalimschy et Waldemar Celes, membres du groupe de recherche TeCGraf, de l'université de Rio de Janeiro au Brésil.

Lua est écrit en langage C ANSI strict, et de ce fait est compilable sur une grande variété de systèmes. Il est souvent utilisé dans des systèmes embarqués où sa compacité est très appréciée. Il profite de la compatibilité que possède le C avec un grand nombre de langages pour s'intégrer facilement dans la plupart des projets.

Il est particulièrement apprécié pour le développement de jeux vidéo comme pour l'interface du célèbre jeu World of Warcraft de Blizzard Entertainment ou encore Far Cry de Crytek Studios, SimCity 4 et prochainement dans Natural Selection 2 de Unknown Worlds Entertainment qui a entre autres développé Decoda, un IDE pour Lua. Lua a été porté dernièrement sur la console portable de Sony, la PSP. Une version Playstation 2 est en cours de portage. Ce langage est également utilisé pour la programmation de jeux de Nintendo DS et pour la programmation Roblox.

Sommaire

Généralités

Commentaires

En Lua, les commentaires débutent par -- et finissent à la fin de la ligne. Si la première ligne commence par #! (shebang) elle est aussi traitée comme un commentaire.

On peut faire des commentaires multilignes avec la syntaxe

--[[ ... ]]

Variables

Les variables peuvent contenir nil (la valeur nulle, vide), un booléen, une chaîne de caractères, un nombre, une table ou une fonction. Il existe aussi d'autres types comme userdata ou thread moins souvent rencontrés. Le type userdata est très pratique, il correspond à un objet C/C++ défini par l'utilisateur : il est donc possible de créer une structure C ou une classe C++, et d'utiliser des objets de ce type dans un script Lua, après avoir attaché à cet objet une métatable qui se charge d'appeler les fonctions de la classe C++. On peut donc imaginer de créer les classes métier de base d'un programme en C, et coder l'application elle-même en Lua, ce qui accélère considérablement son développement (pas de recompilation en cas d'erreur de programmation...).

Par défaut, lorsqu'on déclare une variable, elle est globale à tout l'environnement d'exécution, sauf si elle est précédée du mot-clef local.

Les chaînes de caractères sont délimitées par des guillemets simples (') ou doubles("), voire la marque de chaîne litérale

[[ ... ]]

(multiligne, pas de caractère spécial).

L'opérateur de concaténation de chaînes se représente par deux points (..).

Les fonctions

Les fonctions sont considérées comme des variables. Cela apporte une grande flexibilité : il est par exemple possible de créer des fonctions locales à une autre fonction, de passer une fonction comme paramètre d'une autre fonction (ou comme valeur de retour) ou de mettre des fonctions dans des tables. Si on affecte nil à une fonction (eg. print = nil), la fonction n'existe plus, n'est plus appelable.

Un avantage des fonctions en Lua est qu'elles peuvent prendre un nombre indéfini de paramètres mais surtout elles peuvent retourner plusieurs valeurs.

Les tables, métatables

Les tables sont une structure Lua qui permettent de stocker des variables indexées par une clef (comme en PHP par exemple). Les tables servent à beaucoup de choses en Lua, c'est par exemple la structure utilisée pour représenter des pseudo-classes et objets.

Les métatables sont des tables pour lesquelles on a associé une fonction à chaque opérateur de base (+, -, (), [], ...). Ce mécanisme est très proche de la redéfinition des opérateurs en C++. Par exemple, si la variable x contient une table associée à une métatable appropriée, l'appel de fonction x(arguments) sera valide car Lua cherchera alors dans la métatable comment traiter cet appel.

C'est ainsi qu'on peut implémenter l'héritage entre tables. Si un champ n'est pas trouvé lorsqu'il est demandé, Lua cherchera dans la métatable quelle table est parente et demandera à la table parente de fournir l'élément approprié.

Exemples

Condition

if condition1 then
 -- instructions executées si la condition 1 est vraie
elseif condition2 then
 -- instructions executées si la condition 2 est vraie et la condition 1 est fausse
else
 -- instructions executées si les deux conditions sont fausses
end

Boucles

repeat
 -- code
until condition

et

while condition do
 -- code
end

ainsi que

for var = start, end, step do
 -- code
end

ou

for var_1, ..., var_n in explist do
 -- code
end

Déclaration de fonctions

function mafonction(arg1, arg2, ...)
 -- code
 return résultat1, résultat2
end

-- ou --

mafonction = function (arg1, arg2, ...)
 -- code
 return résultat1, résultat2
end

Appels de fonction

res1, res2 = mafonction(var)

Blocs inconditionnels

Les blocs inconditionnels servent par exemple à déclarer des variables locales à ce bloc :

do
 local mavariable = "chaîne" -- déclaration de variable, optionnel
 -- code utilisant mavariable
end

Déclaration de table

Table à indices numériques croissant (premier indice : 1)

a = { 5, "foo", [[C:\Lua\Lua.exe]], 'bar', 42 }

Table à indices textuels -- les clés ayant la syntaxe d'une variable n'ont pas besoin d'être entre guillemets

a = { d = 5, s = "foo", ['chaîne avec espace'] = true }

Table stockant des variables complexes : autres tables, fonctions, références croisées...

 fonction = function (a, b) return (a + b) / a * b end
t =
{
	b =
	{
		-- Fonction comme clé
		[fonction] = 'Fonction !',
		-- Index numérique
		[5] = 42,
		-- Index chaîne simple (ie. syntaxe d'une variable)
		ls = [[
Valeur
Multiligne
]],
		-- Index chaîne quelconque
		[Expression rationnelle] = [[(?:\d{1,3}\.){3}\d{1,3}]],
		[ [[C:\Lua\Lua.exe]] ] = true,
	},
	-- Stockage d'une fonction
	f = function () return math.random(100) end,
	ff = fonction,
	-- Table comme clé
	[ { 'a', 'b' } ] = { "aa", "bb" },
}
-- Référence dans la table
t.reference = t.a
t[ { t.a, t.b } ] = t.f

Hello World (sur PSP)

red = Color.new(255, 0, 0) --declaration de la couleur rouge
 
while true do --commencement de la boucle
screen:clear()--on efface l'ecran
screen.flip()--on actualise l'ecran
 
screen:print(00,10,"Hello World",red)--on affiche le texte "Hello World" en position {00;10}
screen.waitVblankStart()--on attend l'instruction suivante (dans ce cas la on laisse afficher le texte indefiniment)
 
screen.flip()--on actualise l'ecran
end --fin de la boucle

Exemple de fonction (sur PSP)

--[[ 
Exemple de verification d'identite d'un fichier
--]]
 
function sceCheckImgFile()
 
	function sceErrorImgFile()
		System.message("   Demarrage du jeu impossible   ",0)
		System.Quit()
	end
 
	if System.doesFileExist("img/lua.jpg") == 0  then --verification de la presence du fichier a verifier
		sceErrorImgFile()
	else
		md5 = (System.md5sum(io.input("img/lua.jpg"):read())) -- calcule du MD5 du fichier
			if md5 ~= "8487f9e0e6ad3e928d1455b0df3d9442" then -- verification du MD5
				sceErrorImgFile()
			else
				fichier = ok
			end	
 
	end	
end

Voir aussi

Le Lua a été embarqué dans la Sony Playstation Portable, grâce au programme Lua Player, et plus récemment Lua Player HM et Lua Player Euphoria qui permettent de lire des applications écrite avec le Lua afin d'étendre les capacités de la console. Lua Player HM est une version bien plus complète du Lua Player, tandis que LuaPlayer Euphoria est une version plus légère et beaucoup plus rapide (une image s'affiche 100% plus rapidement qu'avec Lua Player normal). (voir liens externes)

Article connexe

Liens externes


  • Portail de la programmation informatique Portail de la programmation informatique
Ce document provient de « Lua ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article LUA de Wikipédia en français (auteurs)

Regardez d'autres dictionnaires:

  • lua — LUÁ, iau, vb. I. tranz. I. 1. A prinde un obiect în mână spre a l ţine (şi a se servi de el) sau spre a l pune în altă parte. ♢ expr. A lua altă vorbă = a schimba (cu dibăcie) subiectul unei discuţii. A( şi) lua picioarele la spinare = a pleca… …   Dicționar Român

  • Lua — Logo Basisdaten Paradigmen: Skriptsprache, imperativ, funktional, objektorientiert …   Deutsch Wikipedia

  • Lua — [[Archivo:128px|220px]] Información general Paradigma Multiparadigma: interpretado, imperativo, funcional, orientado a objetos, basado en prototipos Apareció en …   Wikipedia Español

  • LUA — (portugiesisch für Mond) ist eine Skriptsprache zum Einbinden in Programme, um diese leichter weiterentwickeln und warten zu können. Eine der besonderen Eigenschaften von Lua ist die geringe Größe des kompilierten Skript Interpreters. Lua wurde… …   Deutsch Wikipedia

  • lua — s. f. 1. O único planeta satélite da Terra. 2. Tempo compreendido entre dois novilúnios. 3.  [Por extensão] Mês. 4.  [Popular] Cio. 5.  [Ictiologia] O mesmo que peixe lua. 6. Disco de ouro ou prata que os Timores usam ao pescoço, como símbolo de… …   Dicionário da Língua Portuguesa

  • Lua — may refer to: * Lua (programming language), a lightweight, extensible programming language * Lua (Yu Gi Oh! 5D s) * Lua (goddess), the Roman goddess * Lua (martial art), a traditional Hawaiian martial art * Lua (song), a single by the folk rock… …   Wikipedia

  • LUA — LUA  аббревиатура: LUA  последний всеобщий предок (также переводится как «Последний универсальный предок» (англ. LUA, Last Universal Ancestor), иначе Последний универсальный общий предок (англ. LUCA, last universal common… …   Википедия

  • lúa — (Del gót. lôfa, palma de la mano). 1. f. Especie de guante hecho de esparto y sin separaciones para los dedos, que sirve para limpiar las caballerías. 2. Mar. Revés de las velas por la parte donde van cazadas con viento largo o en popa. 3. Mar.… …   Diccionario de la lengua española

  • Lua — Lua, römische Göttin, Tochter des Saturnus, welcher nach der Schlacht zur Sühne des vergossenen Blutes erbeutete Waffen von dem Feldherrn verbrannt wurden …   Pierer's Universal-Lexikon

  • LUA — Dea quaedam apud vett, a luendo, expiandoque nomen sortita, quae praeerat lustrationibus, et lustris. Vide Turneb. Adver s. l. 16. c. 20. et l. 23. c. 23. et l. 19. c. 11. Eius meminit A. Gell. l. 13. c. 22. cum ait in libris Sacerdotum Pop. Rom …   Hofmann J. Lexicon universale


Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.