Lua : Différence entre versions

De Wiki SIO EDM
Aller à : navigation, rechercher
 
Ligne 50 : Ligne 50 :
 
Les opérateurs relationnels en Lua sont :
 
Les opérateurs relationnels en Lua sont :
  
* == égal
+
* '''==''' égal
* ~= différent de
+
* '''~=''' différent de
* < plus petit que
+
* '''<''' plus petit que
* > plus grand que
+
* '''>''' plus grand que
* <= plus petit que ou égal
+
* '''<=''' plus petit que ou égal
* >= plus grand que ou égal
+
* '''>=''' plus grand que ou égal
  
 
Le résultat de ces opérateurs est toujours true ou false.
 
Le résultat de ces opérateurs est toujours true ou false.
Ligne 76 : Ligne 76 :
  
 
== Exemples ==
 
== Exemples ==
[[Fichier:Lua1.png]]
+
[[Fichier:Lua1.PNG]]
[[Fichier:Lua2.png]]
+
 
 +
[[Fichier:Lua2.PNG]]
 +
 
 +
[[Fichier:Lua3.PNG]]
  
 
== Usages ==
 
== Usages ==

Version actuelle en date du 23 avril 2019 à 21:24

Créé en 1993 par Luiz Henrique de Figueiredo, Roberto Ierusalimschy et Waldemar Celes, membres du groupe de recherche TeCGraf, Lua est un langage de script libre, réflexif et impératif conçu de manière à pouvoir être embarqué aux sein d'applications afin d'étendre celles-ci. Etant basé sur le langage C et utilisant un interpréteur écrit en C ANSI, Lua profite de la compatibilité que possède le langage C avec un grand nombre de langages pour s'intégrer facilement dans la plupart des projets.

Lua est particulièrement apprécié dans les domaines de l'embarqué, du réseau ou des jeux vidéos. Il est notamment utilisé dans la franchise World Of Warcraft, roblox, garrysmod, computercraft mod, Multi Theft Auto (mod multijoueur de GTA: San Andreas), ainsi que les moteurs de jeu vidéo tels que CryENGINE, LÖVE, ou encore pour développer des jeux sur PSP ou Nintendo DS.

Côté réseau, Lua est utilisé dans Apache, Nginx, les routeurs Cisco, WireShark, Asterisk mais aussi pour les scripts de MediaWiki.

Généralités

Commentaires

En Lua, les commentaires débutent par -- et finissent à la fin de la ligne, comme en Ada. Si la première ligne commence par #! elle est aussi traitée comme un commentaire. Les commentaires multilignes sont également disponibles avec la syntaxe --...

Les types et les valeurs

Lua est un langage à typage dynamique ce qui signifie que les variables n'ont pas de type, contrairement aux valeurs qui elles sont typées. Il n'existe pas de définition de type en Lua. Toutes les valeurs soutiennent leur propre type.

Avec Lua, toutes les valeurs sont des « first-class values ». (valeurs de première classe). C'est-à-dire que toutes les valeurs peuvent être stockées dans des variables, passées comme arguments à d'autres fonctions, et retournées comme résultat.

Il existe huit types de base en Lua : nil, boolean, number, string, function, userdata, thread, table.

  • nil, dont le type de valeur est rien, a la propriété principale d'être différent de toute autre valeur et représente généralement l'absence d'une valeur.
  • boolean, dont les seules valeurs possibles sont false et true. Les deux types nil et false représentent ce qui est faux. Toute autre valeur est considérée comme vraie (true).
  • number, représente un chiffre ou un nombre réel, en double précision à virgule flottante.
  • string, est une table de caractères. Lua est « 8-bit clean » : les chaînes de caractères peuvent contenir n'importe quel caractère 8-bit, y compris "\0" (qui signifie la fin d'une chaîne).
  • function, Lua peut appeler et manipuler des fonctions écrites en Lua et des fonctions écrites en C.
  • userdata, est fourni pour permettre à des données C arbitraires, d'être stockées dans des variables Lua. Ce type correspond à un bloc de mémoire brut et n'a pas d'opération prédéfinie dans Lua, à l'exception d'affectation et de test d'identité. Toutefois, en utilisant les méta-tables, le programmeur peut définir certaines opérations pour les valeurs d'userdata. Les valeurs d'userdata ne peuvent pas être créés ou modifiées directement avec Lua, il faut passer par l'intermédiaire de l'API C. Cela garantit l'intégrité des données détenues par le programme hôte.
  • thread, représente des « threads » indépendants de l'exécution qui sont utilisés pour mettre en œuvre des « coroutines ». Ne confondez pas les thread de Lua avec les « threads » du système d'exploitation. Lua soutient les « coroutines » sur tous les systèmes, même ceux qui ne supportent pas les « threads ».
  • table , ce type met en œuvre des tables associatives, qui peuvent être indexées non seulement avec des nombres, mais aussi avec des valeurs quelconques, sauf nil. Les tables peuvent être hétérogènes, autrement dit, elles peuvent contenir des valeurs de tous types, à l'exception nil. Les tables sont les seules données mécaniquement structurées en Lua. Elles peuvent être utilisées pour représenter des tables ordinaires, des tables de symboles, de jeux, de livres, de graphiques, d'arbres, etc. Pour déclarer les enregistrements, Lua utilise le nom du champ comme index ; a.name est une façon plus simple d'écrire a["nom"] et a exactement la même signification. Il existe plusieurs méthodes pratiques pour créer des tables. ( Voir à ce sujet, le chapitre consacré aux tables. )

Les tables, les fonctions, les threads, et les userdatas sont considérés comme des objets.

Les variables ne peuvent donc pas contenir ces valeurs en tant que telles, mais seulement des références à ces valeurs.

Les affectations, le passage de paramètres et les fonctions sont toujours manipulés par les références à ces valeurs et ces opérations n'impliquent aucune forme de copie.

La fonction type () retourne une chaîne, décrivant le type d'une valeur donnée.

Les opérateurs arithmétiques

Lua soutient les opérateurs arithmétiques habituels :

  • + (addition),
  • - (soustraction),
  • * (multiplication),
  • / (division),
  • % (modulo),
  • ^ (élévation) ;

L'élévation, fonctionne pour tout exposant. Par exemple, x^(-0,5) calcule l'inverse de la racine carrée de x.

Modulo est défini comme étant le reste d'une division, qui arrondit le quotient vers moins l'infini.

Les opérateurs relationnels

Les opérateurs relationnels en Lua sont :

  • == égal
  • ~= différent de
  • < plus petit que
  • > plus grand que
  • <= plus petit que ou égal
  • >= plus grand que ou égal

Le résultat de ces opérateurs est toujours true ou false.

L'égalité == (deux fois le signe égal) compare d'abord le type de ses opérandes. Si les types sont différents, alors le résultat sera false.

Les valeurs nombres et chaînes sont comparées selon la méthode habituelle.

Les objets (tables, userdata, threads, et fonctions) sont comparés par référence.

Deux objets sont considérés comme égaux, uniquement s'ils ont le même objet.

Chaque fois que vous créez un nouvel objet (table, userdata, thread, ou fonction), il est automatiquement différent de n'importe quel autre objet existant.

Les opérateurs logiques

Les opérateurs logiques sont and, or, et not. (Qui font aussi partie des mots réservés.)

Comme les structures de contrôle (if, while, etc.), tous les opérateurs logiques considèrent à la fois false et nil comme faux et tout le reste comme vrai.

Exemples

Lua1.PNG

Lua2.PNG

Lua3.PNG

Usages

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 écrites avec Lua afin d'étendre les capacités de la console. Viendra plus tard l'XtreamLua Player, destiné à la création de jeux vidéo. Une modification (non officielle) du micrologiciel de la PSP permettait de lancer des programmes non-signés par Sony d'où la création d'un interpréteur Lua adapté pour la PSP.

Lua Player Euphoria reprend la syntaxe du Lua Player original et exécute le script à une vitesse fulgurante comparé au Lua Player HM. Cependant, Lua Player Euphoria est moins complet que son homologue plus ancien.

Lua Player One, un des derniers Lua Player mis à jour pour PSP, est un Lua Player développé au sein d'une communauté de développeurs espagnols ; il permet, entre autres, de gérer la 3D sur PSP. Un jeu de mini-golf dans l'espace a été développé à l'aide de cet outil.

Plus récemment, Lua Player Plus (LPP) est sorti sur Ps Vita le 16 Aout 2015 et la version actuelle est la 5.0.1. Ce lua player permet de créer des jeux pour la dernière console portable de Sony.

Lua est également utilisé à présent pour l'extension des capacités du lecteur multimédia VLC.

Lua est aussi utilisé dans l'EFL Edje d'Enlightenment.

Lua est utilisé comme langage de configuration et de script dans le gestionnaire de fenêtre Awesome.

Minetest, un clone de Minecraft sous licence LGPL, utilise Lua comme langage pour l'écriture d'extensions.

ComputerCraft, une extension du jeu Minecraft, utilise Lua pour programmer des programmes graphiques ou consoles et des « robots » autonomes à l'intérieur du jeu, permettant d'automatiser de nombreuses tâches répétitives.

Il existe également un moteur de jeu utilisant Lua comme langage de programmation (une sorte de Pygame pour Lua) : LÖVE.

Garry's Mod, un jeu de sandbox très connu et unique en son genre utilise le Lua pour y intégrer des extensions appelées 'Addon'.

Roblox, un autre jeu de sandbox très connu, les joueurs sont libres de construire n'importe quoi et peuvent créer des scripts Lua pour améliorer leurs jeux.

Le PABX Asterisk propose Lua comme alternative pour étendre son plan de numérotation.

MediaWiki et les sites Wikimedia utilisent Lua comme langage de script pour les modèles (appelés modules).

Le logiciel CraftStudio utilise Lua pour programmer les éléments dynamiques des modèles.

Le logiciel libre d'interface neuronale directe OpenViBE utilise Lua comme langage de script, en particulier pour la gestion de stimuli pour les expériences de neuroscience.

Le robot IRC irccd utilise Lua pour la création de plugins.

L'antispam Rspamd utilise également Lua pour son API.

Lua est le langage de scripting principalement utilisé pour le système d'exploitation embarqué OpenWrt fonctionnant sur de nombreux routeurs. L'interface graphique d'administration LuCI est entièrement écrite en Lua.

Lua est le langage natif de Domoticz, logiciel domotique open source. Il permet le scripting avec des fonctionnalités assez puissantes : Domoticz déclenche automatiquement ces scripts sur les changements d’états, en fonction du temps, etc.

Lua est également le langage natif de NSBase, logiciel de gestion de bases données. Le scripting permet de dynamiser les formulaires, rapports. Lua ainsi intégré permet de créer de véritables applications de gestion de bases de données.

Le logiciel de simulation de vol spatial Orbiter et ses add-ons (UCGO, UMmu) utilisent Lua pour permettre la création aisée d'écrans de contrôle (MFD - Multi Function Display), de missions ou de vaisseaux. La création de vaisseaux, en particulier, à la différence de modules DLL, ne nécessite pas la compilation d'un fichier C++.

Lua est inclus dans la console de poche open-source Pocket Chip (projet Kickstater). En effet cette dernière embarque le programme de console virtuel Pico-8 qui permet de jouer et de créer des jeux en Lua.

Beaucoup d'autres jeux vidéo l'utilisent, comme World of Warcraft de Blizzard Entertainment, ou Garry's Mod, ou Far Cry (et le moteur CryEngine en général) de Crytek Studios, ou encore le logiciel multijoueurs de GTA:SA Multi Theft Auto, voire encore pour SimCity 4 et Natural Selection 2 de Unknown Worlds Entertainment (qui a entre autres développé Decoda un IDE pour Lua). Enfin, certains scripts de Zoo Tycoon 2 (Blue Fang Games) sont également présents sous des formes non compilées dans les fichiers du jeu.

BeamNG.drive utilise Lua pour compléter ses équations physiques.

The Binding of Isaac : Afterbirth + est un DLC pour le jeu The Binding of Isaac : Rebirth qui permet le support de mods écrits en Lua.

Prosody : serveur XMPP léger écrit entièrement en lua.

Liens externes

Site Officiel De Lua

ZeroBrane Lua IDE


--Rangier (discussion) 23 avril 2019 à 22:11 (CEST)