Developpez.com - Rubrique 2D-3D-Jeux

Le Club des Développeurs et IT Pro

Découvrez le premier cours d'initiation complet sur Lua

Le célèbre langage de script facilement interfaçable en C, par Claude Urban

Le 2013-07-07 18:51:30, par Claude URBAN, Membre averti
Bonjour à toutes et à tous,

Je viens de terminer un tutoriel sur le langage de script Lua que vous trouverez à cette adresse: http://wxlua.developpez.com/tutoriels/lua/general/cours-complet/. Ce tutoriel est un cours d'initiation complet au langage de script qu'est Lua et vous permettra d'apprendre rapidement les bases.

Je vous remercie de bien vouloir me faire part de vos remarques, commentaires et critiques.

Merci de votre attention et bonne lecture.

Bien à vous.

Claude
  Discussion forum
12 commentaires
  • Claude URBAN
    Membre averti
    Bonjour rick47,

    Ça va être un peu compliqué pour te répondre, d'autant plus que ta demande dépasse largement le cadre de mon "petit tutoriel"... pour débutant!

    Pourquoi compliqué:

    Parce que Lua n'est pas vraiment un langage orienté objet, et qu'il ne possède pas de concept intégré des classes.

    Que dans ton exemple, on rentre en plein dans la POO.

    Que le système de (fausses) classes "Lua" est différents des systèmes "classiques" C++ et autres.

    Il s'agit plus d'un système de "pseudo classes" qui utilise des tables et des méta-tables...

    Et en plus, tu me donnes simplement qu'une toute petite ligne de code...

    Mais bon, je vais quand même essayer.

    RentVehicles est très certainement une "classe" qui a du être créée précédemment de la façon suivante.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    -- Création d'une classe
    RentVehicules = { ? }    -- ? parce que je ne sais pas s'il y a quelque chose à l'intérieure...
    
    
    -- méthode de classe
    function RentVéhicles:loadMap(name)
    
        --- ...là aussi je ne sais pas ce qu'il y a ???
    
    end
    loadMap est une méthode de classe qui appartient à RentVehicles et qui est censé faire quelque chose...

    Les deux points : indique la liaison entre la classe et la méthode.

    Quant à (name) il s'agit d'un paramètre classique que l'on passe à la fonction lors de son appel.

    Il faudra ensuite créer un objet qui prendra les caractéristiques de ta fonction.

    nom_objet = RentVehicles:loadMap(nom_de_la_map) (nom_de_la_map, par exemple)

    et après, tu fais ce que tu as à faire avec ton nom_objet...

    MAIS, il me faut quand même reconnaître que je m'aîtrise assez mal le sujet de la POO avec Lua... (POO qui, encore une fois, n'en est pas une...)

    Recherche sur le Net pour plus de précision.

    Il y a pléthore d'exemples et d'explications.

    Essaye là, http://www.tutorialspoint.com/lua/lu...t_oriented.htm, ça m'a semblé intéressant.

    Voilà, j'espère que ma réponse te seras de quelque utilité.

    Merci de m'avoir contacté et d'avoir lu mon tutoriel.

    Et si tu as d'autres interrogations, n'hésite pas...

    Bonne journée.

    PS: Il est inutile de faire plusieurs mails... en général un seul suffit!
    Il faut bien comprendre que je ne suis pas au garde à vous devant ma boîte mail à attendre que quelqu'un me pose une question.
    Il faut donc "laisser le temps au temps..."
    Merci.
  • Claude URBAN
    Membre averti
    Bonjour,

    Ça y-est, c'est corrigé.

    Je suis content que mon tutoriel sur lua te soit utile et je te remercie pour ta remarque.

    Effectivement, il manquait la parenthèse fermante aux deux fonctions print(...).

    Comme mentionné ci-dessus, l'erreur est maintenant corrigée.

    N'hésite pas à me recontacter si tu en rencontres d'autres.

    Encore merci à toi.

    Bonne journée et bonne lecture.

    Claude
  • Claude URBAN
    Membre averti
    Bonjour Pix56 et BRAVO ...

    Bravo pour ta sagacité et merci pour m'avoir retourné cette information.

    Bien évidement tu as entièrement raison... "Errare humanum est, perseverare diabolicum* "

    C'est (40 ou 44) qui a mis la pagaille... mais tu as raison.

    Ce qui prouve que tu as parfaitement compris le "pourquoi du comment".

    Il a fallu que je remette les mains dans le cambouis... mais j'y suis arrivé et c'est corrigé.

    Sur les deux sites: developpez.com et wxLua.free.fr

    Si tu en trouves d'autres, n'hésite pas à me les signaler.


    Merci à toi et bonne continuation dans ton étude de ce langage.

    Claude

    * Se tromper est humain, persévérer est diabolique ...
  • Claude URBAN
    Membre averti
    Bonjour,

    Merci de vous êtes intéressé à ce langage et de vous êtes arrêté sur mon tutoriel.

    Dans ce cas, il ne faut pas prendre au pied de la lettre les notions or, and et not .

    Si dans le langage courant, or équivaut à ou, and à et, not à pas, dans le cas du langage LUA il

    faut retenir que :

    1/ L'opérateur de disjonction or retourne son premier argument si cette valeur est différente de nil

    et false, ou son second argument dans le cas contraire.

    Exemple:

    10 or 20 va retourner 10, car le premier argument est 10. (Valeur différente de nil et false)

    nil or 20 va retourner 20, car le premier argument est nil. (Donc, retourne le deuxième.)

    false or 20 va retourner 20, car le premier argument est false. (Donc, retourne le deuxième.)


    C’est une règle de ce langage .

    Il faut l’apprendre et à ne pas l’interpréter.

    Ne pas considérer or comme un choix et and comme l’un ou l’autre.

    Même si ça peut paraître illogique.

    Mais considérer que les deux opérateurs and et or utilisent un raccourci d’évaluation.


    En résumé :

    or retourne le premier argument s’il est différent de false / nil.

    and retourne le premier argument si est égal à false / nil.

    not retourne toujours false / true.


    J’espère avoir répondu à votre question et que ces quelques lignes vous permettrons de mieux

    appréhender les subtilités de ce langage ?


    N’hésitez pas à venir me requestionner si besoin est.


    Bonne continuation.

    Claude


  • i5evangelist
    Membre éclairé
    Bonjour,
    je suis en train de lire votre passionnant tuto, j'ai besoin d'un langage de script et j'ai jeté mon dévolu sur Lua.
    Au chapitre des tables, section 8b, je pense qu'il y a eu un soucis de copier/coller, enfin, le code n'est pas du tout correct.
    je pense que le code est plutôt :
    Code :
    1
    2
    3
    4
    5
    6
    7
    maTable = {} --création d'une table
    k = "x" -- affectation de la chaîne "x" à la variable
    maTable[k] = 10 -- nouvelle entrée, avec la clé(k) = "x" de valeur = 10
    maTable[20] = "grand" -- nouvelle entrée, avec la clé(k) = 20 de valeur = "grand"
    print(maTable["x"]) --> 10 (c'est la clé k qui est égal à 20)
    print(maTable[20]) --> "grand"
    Merci en tout cas pour ce travail.
  • Pix56
    Nouveau Candidat au Club
    Bonjour un grand merci pour tout,

    Cela me permet de progresser, car il est très difficile de comprendre une fonction si on ne sait pas qu'elle existe

    Je pense qu'il faudrait modifier le code exemple dans la section :

    4.f return et break

    if car ~= 40 and car ~= 44 then
    -- on fait ici ce que l'on a à faire
    return car
    else
    break
    end

    Par :
    if car == 40 or car == 44 then

    pour que l'explication suivante soit en accord.

    Ce qui peut se traduit par :

    si … on a trouvé ce que l'on cherche … alors
    … on fait ce que l'on a à faire et on sort du test en retournant la valeur de car, que l'on a trouvée (40 ou 44).
    sinon … on sort (break) du test conditionnel sans rien faire et le programme continue directement après la fin du test.
    fin
    PS: encore un grand MERCI Claude Urban , message à supprimer après la correction .
  • rick47
    Candidat au Club
    Bonjour

    je débute dans la programmation Lua et j'ai lu votre tutoriel, très bien fait et complet. merci.
    Par contre je n'ai pas trouvé de réponse à une question : en ce moment je modifié et teste des scripts. Je voudrais savoir à quoi correspond le nom d'une fonction composé du symbole ":"
    Ex : function RentVehicles:loadMap(name) et comment est utilisé ( alimenté ?) l'argument "name"

    D'avance merci beaucoup
    Eric
  • Roland Chastain
    Rédacteur/Modérateur
    Bonjour !

    Envoyé par Claude URBAN
    Que le système de (fausses) classes "Lua" est différents des systèmes "classiques" C++ et autres.

    Il s'agit plus d'un système de "pseudo classes" qui utilise des tables et des méta-tables...
    Personnellement, je n'y ai jamais trop compris grand chose.

    @rick47

    J'ai supprimé la discussion que vous aviez ouverte dans le forum, puisque la question était la même.
  • Nos_ave
    Futur Membre du Club
    Bonjour,

    Actuellement, je me suis mis à apprendre le LUA et j'ai découvert votre tutorial très intéressant étant donné que je suis débutant dans ce domaine ^^.

    J'ai une petite question concernant les opérateurs logiques (2-h), je ne comprends pas les exemples que vous mentionnez :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10 or 20  --> 10
    10 or error()  --> 10
    nil or "a"  --> "a"
    nil and 10  --> nil
    false and error()  --> false
    false and nil  --> false
    false or nil  --> nil
    10 and 20  --> 20
    Exemple :

    10 or 20 --> 10, alors que pour moi c'est un choix entre l'un OU l'autre.
    10 and 20 --> 20, alors que pour moi il faut l'un et l'autre pour que ça fonctionne.

    A mon avis, je ne suis pas du tout dans le bon. Auriez-vous une autre explication svp ?

    Merci ^^.

    Cordialement
  • Nos_ave
    Futur Membre du Club
    En effet, ayant pour habitude d'utiliser la logique comme dans les autres domaines, je n'avais pas prêté attention à la signification de cette partie. Maintenant, je comprends mieux .

    Merci de m'avoir éclairé sur ce point.

    Cordialement