Initiation au langage Lua (3ème partie) + exercices

Créer, jouer et publier des jeux vidéos

Initiation au langage Lua (3ème partie) + exercices

Bonjour,

Nous voici dans la troisième et dernière partie de notre initiation au langage Lua. Quand je dis « dernière partie », ça ne veut pas dire que je ne publierai plus de tutoriels sur Lua. Rassurez-vous, j’en publierai d’autres parce que cet article n’est rien d’autre que la dernière partie de la phase d’initiation. Avec ces trois parties, vous serez déjà en mesure de comprendre les premiers tutoriaux sur Corona SDK. Ce sera le cas la semaine prochaine où nous allons créer notre premier jeu basique. Suite à ce premier jeu, nous poursuivrons avec l’apprentissage de Corona.

Les tables

Dans cette troisième partie, nous allons parler de ce qu’on appelle en Lua les tables. Les tables sont des structures de données qu’on utilise pour créer par exemple des tableaux. Elles sont partout, sont indispensables en Lua et il est donc important de savoir bien les utiliser pour pouvoir tirer profit de ce langage.

Dans d’autres langages de programmation, on distingue plusieurs structures de données qui permettent de stocker, de trier et d’organiser des données en mémoire. On peut citer, entre autres, les tableaux à une ou deux dimensions, les tableaux associatifs, les piles, les files. En Lua, seules les tables (qui sont l’équivalent des tableaux associatifs) permettent de créer ces différentes structures de données. Ainsi, on pourra alors définir une table comme un ensemble de cases mémoires dans lesquels on peut stocker des variables de n’importe quel type, des valeurs, des fonctions et même des tables (oui, ça se fait 😉 ). Une table en Lua peut prendre un nombre indéterminé de données (et de n’importe quel type) parce que sa taille s’accroit au fur et à mesure qu’on y ajoute des données.

Contrairement à la plupart des langages, la numérotation des champs d’un tableau (ou d’une table si vous préférez) ne commence pas par zéro (0), mais par un (1) en Lua.

La création d’une table se fait avec des accolades ( { } ). On peut y ajouter des données pendant la création ou le faire après la création.

Exemple d’utilisation:

-- création de deux tables vides. La première sous forme de variable globale et la deuxième sous forme de variable locale.

tableGeneraliste={} -- table globale vide

local nomPays={} -- table locale vide

Une fois la table vide créée, il faut y ajouter des données. L’ajout de ces données peut se faire de quatre manières différentes. Avant de passer à des exemples d’ajout, il y a une chose à comprendre sur les tables. Chaque élément d’une table est constitué d’une clé et d’une valeur. Vous pouvez donner n’importe quel nom à ces clés. Si vous ne leur donnez aucun nom, Lua attribuera automatiquement à chaque élément de la table, une clé numérique.

Exemple d’utilisation:

-- 1er EXEMPLE D’AJOUT : création de la table et ajout des données à la création (initialisation)

local nomPays = {"Guatemala", "Thaïlande", "Estonie", "Togo"}

print(nomPays[2]); -- affiche Thaïlande

Dans ce premier exemple d’ajout, des données ont été ajoutées à la table dès sa création. N’ayant pas précisé le nom des clés de ces valeurs, Lua attribuera la valeur 1 comme nom de clé au premier élément du tableau, 2 pour celui du deuxième élément et ainsi de suite. Ainsi, pour accéder à un élément de la table, il suffit d’utiliser le nom de la table en mettant entre crochets, le nom de la clé de cet élément. Pour préciser le nom des clés, nous pouvons écrire le code comme ceci :

local nomPays = {pays1="Guatemala", pays2="Thaïlande", pays3="Estonie", pays4= "Togo"}

print(nomPays.pays4) -- affiche Togo
print(nomPays["pays2"]) -- affiche Thaïlande

Au niveau de l’affichage des éléments du tableau, vous pouvez utiliser l’une des deux manières utilisées dans l’exemple.

Passons maintenant à deux autres manières possibles pour ajouter des données dans une table.

Exemple d’utilisation:

infosPerso={} -- création d’une table vide

-- 2ème EXEMPLE D’AJOUT
infosPerso.age=30
infosPerso.pays="Japon"

infosFrere={} -- création d’une table vide

-- 3ème EXEMPLE D’AJOUT
infosFrere["age"]=20
infosFrere["pays"]="Guatemala"

Dans le deuxième et troisième exemple d’ajout de données à la table, nous avons précisé clairement le nom des clés avant de leur attribuer des valeurs. Au niveau de l’affichage des données, vous pouvez utiliser les mêmes syntaxes comme présentées ci-dessous :

print(infosPerso.age) -- affiche 30
print(infosPerso["pays"]) -- affiche Japon

Pour finir avec l’ajout des données, nous allons voir la quatrième et dernière manière de le faire. Dans la bibliothèque standard de Lua, il existe un module nommé table qui fournit des fonctions pour effectuer certaines opérations sur les tables. Parmi ces fonctions, on en trouve une qui permet aussi de faire l’ajout de données dans une table. Elle se nomme insert() et prend trois paramètres. Le premier paramètre est le nom de la table à remplir, le deuxième paramètre (qui est facultatif) est la position à laquelle on doit ajouter la donnée, le troisième et dernier paramètre est la donnée à ajouter.

Exemple d’utilisation:

infosSoeur={} -- création d’une table vide

-- 4ème EXEMPLE D’AJOUT
table.insert(infosSoeur,1,28)
table.insert(infosSoeur,2,"Costa Rica")

print(infosSoeur[2]) -- affiche Costa Rica
print(infosSoeur[1]) -- affiche 28

Tout comme pour l’ajout des données avec la fonction insert(), le module table fournit d’autres fonctions pour effectuer d’autres actions sur les tables comme la copie du contenu d’une table dans une autre (copy()), la concaténation de deux tables (concat()), le tri d’une table (sort()), la suppression d’un élément d’une table (remove()) et bien d’autres. Faites des tests avec ces fonctions pour voir comment elles fonctionnent.

L’opérateur length (#)

Pour connaître la longueur d’une chaîne de caractères ou le nombre d’éléments présents dans un tableau en Lua, on utilise le symbole dièse (#). Ce symbole précède le nom de la variable dont on veut déterminer la taille. Voici quelques exemples :

Exemple d’utilisation:

local nom="Nicky Larson"
print(#nom) -- affiche 12 (nombre de caractères présent dans la chaîne de caractères)

local nomsVilles={"Lomé", "Bangkok", "Santo Domingo"}
print(#nomsVilles) -- affiche 3 (nombre d'éléments présent dans la table)

Les tables constituent un sujet important en Lua et en Corona SDK. On ne peut presque pas se passer d’eux. Pour cela, je vous suggère d’effectuer plusieurs tests et d’apprendre à les maîtriser au fil des jours.

Pour finir, voici ci-dessous deux vidéos que je vous recommande sur les tables.

Ressources vidéo sur les tables en Lua

 

Exercices

Voici trois exercices pour finir notre série de tutoriels d’initiation sur le langage Lua. Ils sont faciles et je vous suggère de les faire.

À propos d’exercice, je pense créer une nouvelle catégorie sur le blog où une série d’exercices sera proposée chaque mois dans le but de vous aider à vous exercer sur tous les concepts qui seront vus chaque mois. Dites-moi dans les commentaires si cette idée vous tente et si je dois le faire.

  1. Créer un programme en Lua qui affiche la table de multiplication de 3 sous la forme suivante :
  • 3 x 0 = 0
  • 3 x 1 = 3
  • 3 x 2 = 6
  • 3 x 3 = 9
  • 3 x 4 = 12
  • 3 x 5 = 15
  • 3 x 6 = 18
  • 3 x 7 = 21
  • 3 x 8 = 24
  • 3 x 9 = 27
  • 3 x 10 = 30
  • 3 x 11 = 33
  • 3 x 12 = 36

Pour l’exercice, utiliser l’une des 3 instructions de boucle dont nous avons parlé dans la deuxième partie du tutoriel.

  1. Écrire un programme Lua qui liste 10 nombres entiers dans un tableau avant d’en rechercher et d’afficher le plus grand et le plus petit.
  1. Écrire 2 fonctions possédant chacune un argument entier et une valeur de retour entière permettant de préciser si l’argument reçu est multiple de 2 (pour la première fonction) ou multiple de 3 (pour la seconde fonction).

Si vous avez des soucis avec les exercices, déposez-moi ci-dessous un commentaire lié à votre problème et je pourrai vous aider à le résoudre. Bon weekend 😉

 

2 réponses

  1. alain dit :

    Bonjour
    Très bon cour, un peut galéré avec l’exercice 2 mais réussis finalement . Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
%d blogueurs aiment cette page :