Lingo

Un article de Wikipédia, l'encyclopédie libre.

Lingo est le langage de programmation qui accompagne le logiciel Macromedia Director.
L'auteur du Lingo est le développeur John Henry Thompson.

Sommaire

[modifier] Origine du nom

Le mot Lingo signifie en anglais argot, au sens de langage vernaculaire, langue spécialisée appartenant à un groupe précis (ex. l'argot des typographes).

[modifier] Caractéristiques du langage

La syntaxe du Lingo est très simple et très lisible, elle rappelle (de loin) le Basic ou le Pascal. Lingo est un dérivé ou dialecte du langage HyperTalk utilisé dans le logiciel auteur HyperCard distribué sur les MacIntosh à partir de 1986. Il a été prévu au départ pour être le plus lisible possible pour les anglophones.

  • set mavariable to 10
  • go to frame 20
  • set word 4 of montexte to "bonjour"

[modifier] Syntaxe

Voici un exemple de fonction :

on multiplie(a,b) 
    return a*b
end multiplie

Les fonctions commencent en effet toutes par on [nom de fonction][(arguments)] et se terminent par end [nom de fonction]. Lingo est un langage très laxiste, on est par exemple autorisé à ne pas mettre les parenthèses après le nom de la fonction (on multiplie a, b).

À noter, les variables sont typées dynamiquement et il n'existe pas de différenciation entre le "=" d'affectation et le "=" de comparaison.

if a=1 then
   b=2
else
   if a="une chaîne" then
      b=3
   end if
end if

Après des années d'évolution syntaxique, Lingo est devenu un langage "pointé" assez classique, et donc très lisible.

Director est un logiciel dédié à l'interactivité. Par conséquent, Lingo permet l'interception facile d'un grand nombre d'évènements tels que : preparemovie (avant l'affichage), startmovie (au moment de l'affichage), mousedown (clic enfoncé), mouseup (clic relâché), etc. Certains scripts intercepteurs évènements concernent l'ensemble du programme, d'autres peuvent ne s'appliquer qu'à des objets précis, comme les sprites (occurrence d'un objet - par exemple graphique - sur la scène).

on mouseup 
        -- lorsque l'on clique sur l'objet auquel s'applique ce script''
   if the mouseh<320 then
        -- si la position horizontale de la souris est inférieure à 320
      puppetsound(1, "bing")
        -- on déclenche le son nommé "bing" sur la piste 1.
   end if
end

[modifier] Quelques éléments de syntaxe

  • les noms des variables peuvent contenir des lettres, des chiffres, ou le signe underscore. Elles ne peuvent pas commencer par un chiffre.
  • on peut créer des symboles avec le signe dièse (#). Un symbole n'est pas une variable.
par exemple, dans maCouleur = #rouge, le mot #rouge ne signifie rien pour Lingo ; en revanche, il permet un code lisible pour le programmeur.
  • l'affectation se fait avec le signe =
  • la comparaison se fait ainsi :
    • = (égalité)
    • < (inférieur)
    • > (supérieur)
    • <= (inférieur ou égal)
    • >= (supérieur ou égal)
les opérateurs sont les mêmes qu'il faille comparer des entiers, des chaînes, ou quoi que ce soit d'autre.
  • les tableaux (listes) se créent ainsi
monTableau = [] ou monTableau = [1,2"a",0,"b"]
  • les tableaux peuvent contenir des tableaux
monTableau = [[1,2],[1,5]]
  • les tableaux peuvent être associatifs
monTableau = [#age:24, #sexe:"masculin", #taille: 1.80]

[modifier] Points, rectangles, quads

Lingo permet de manipuler des variables de coordonnées telles que les points, les rects et les quads.

  • un point se note ainsi : point(10,10)
  • un rectangle se note ainsi : rect(10,10,30,40) -- rectangle de 20pix de large et 30 de haut commençant au point 10,10
  • un quad est une liste de 4 points. En manipulant les quads on peut déformer des rectangles.
ex : [[point(10,10),point(10,30),point(30,40), point(10,40)]].

l'intérêt de ce genre de variables est que Lingo propose des fonctions prédéfinies permettant par exemple de savoir si un point donné est inclus dans un rectangle donné. Par ailleurs, on peut appliquer des opérations arithmétiques à ces variables. Exemple : point(10,10)+point(5,5) donnera : point(15,15)

Lingo possède également toute une série de fonctions qui permettent de manipuler facilement les vecteurs 3d: additions, produits scalaires, distances, matrices de transformation...

[modifier] Types de scripts

Il existe 4 types de scripts en Lingo et c'est une source potentielle d'erreurs, qui prédéterminent l'utilisation qui pourra être faite desdits scripts :

[modifier] Les scripts classiques

  • Les scripts dits d'"animation", qui sont attachés à l'animation entière et qui sont l'équivalent d'un code procédural. On y met uniquement des variables et fonctions globales. Les scripts globaux reçoivent quelques fonctions-evenements prédéfinis.
  • Les scripts dits "parents" qui permettent de simuler des classes d'objet.
un exemple de script parent :
property pNombre 
-- déclaration d'une variable interne à l'objet

on new me, n
  pNombre = n
  return me
end

on incremente me
  pNombre = pNombre +1
end

Si ce script se nomme "nombre", on l'instanciera par exemple de cette manière :

monNouveauNombre = new(script "nombre", 10)

et on invoquera sa fonction "incremente" de cette manière :

monNouveauNombre.incremente()


[modifier] Les scripts applicatifs

Ce sont des objets complexes dont le script n'est pas directement accessible et que l'on développe pour les graphistes et intégrateurs.

  • Les scripts dits "comportement": Par un simple drag and drop ces scripts se rattachent à des objets de la scène: image, sprite, acteur. Ces scripts ont des fonctions prédéfinies qui permettent de paramétrer manuellement les instances.
  • Les scripts dits d'acteur, qui sont cachés dans les acteurs de la bibliotheque.

[modifier] Implémentations

Le Lingo est un langage propriétaire, il n'en existe donc qu'une seule implémentation.

[modifier] Avenir

Dans sa version MX2004, le logiciel Director accepte l'usage de deux langages différents : le Lingo, et une implémentation de Javascript/ECMAScript adaptée.

Autres langues