jeudi 19 octobre 2006— Dernier ajout mercredi 24 octobre 2007

Les variables

Définition

Une variable c’est un espace de mémoire vive réservé , dans lequel on peut stocker des informations. Ces informations sont des valeurs de type “ texte ”, “ nombre ” ou valeur logiques.

Caractéristiques

Ces informations étant dans la mémoire vive, quand on quitte l ‘application, les informations disparaissent. (Cf les calculatrices et les touches M+ et MR) Une variable est uniquement identifiée par son nom. Il ne faut pas en Lingo déclarer le type du contenu d’une variable. Cela est très facile mais des confusions peuvent se créer. exemple :

maVariable = "toto"
put maVariable
-- "toto"
maVariable = maVariable + 0
put maVariable
-- 171106258
maVariable = "toto"
maVariable = maVariable + "0"
put maVariable
-- 342212626

Utilisation

Pour stocker une valeur dans une variable on utilise les commandes "put" ou "set". la commande set n’est plus utilisée aujourd’hui, c’est le signe "=" qui la remplace.

put "le texte à garder" into maVariable
maVariable = "le texte à garder"
monCompteur = monCompteur + 1
put monCompteur + 1 into monCompteur

Le nom de la variable s’utilise comme un argument dans une commande ou fonction lingo. Les variables permettent de rendre le code plus lisible. exemple pour le calcul de la surface d’un sprite :

largeur = sprite(1).width
hauteur = sprite(1).height
surface = largeur * hauteur
put surface

c’est plus lisible que : put (sprite(1).width * sprite(1).height)

Les variables permettent aussi une souplesse lors des ajustements. exemple

on mouseUp
  sprite(1).locH = sprite(1).locH + 5
  if sprite(1).locH> 640 then
     set sprite(1).locH = 0
  end if
  set sprite(1).locV = sprite(1).locV - 5
  if sprite(1).locV< 0 then
     set sprite(1).locV = 480
  end if
end

Si maintenant vous devez pour une raison ou une autre, déplacer le sprite sur la piste 10, vous devrez explorer tout le code pour transformer les références au sprite 1 par "sprite 10" avec le risque d’en oublier.

Par contre si vous faisez référence au spite en question par une variable, vous gagnerez du temps à la mise au point sans risque d’erreur, avec en plus la possibilité de récupérer le script. Le script précédent devient :

on mouseUp
NumSpriteEnMouvement = 1
mouvSprite = sprite(NumSpriteEnMouvement)
mouvSprite.locH = mouvSprite.locH + 5
if mouvSprite.locH> 640 then
 mouvSprite.locH = 0
end if
mouvSprite.locV = mouvSprite.locV - 5
if mouvSprite.locV< 0 then
 mouvSprite.locV = 480
end if
end

Les variables permettent aussi de créer des gestionnaires avec arguments. L’argument est alors une variable dont on ne connaît pas le contenu.

Avec l’exemple précédent on peut écrire le gestionnaire suivant :

on bougeMoi spriteEnMouvement
mouvSprite = sprite(NumSpriteEnMouvement)
mouvSprite.locH = mouvSprite.locH + 5
if mouvSprite.locH> 640 then
 mouvSprite.locH = 0
end if
mouvSprite.locV = mouvSprite.locV - 5
if mouvSprite.locV< 0 then
 mouvSprite.locV = 480
end if
end bougeMoi

on mouseUp
 bougeMoi(1)
end

Différents types de variables

Il existe différents types de variables :

1. variables locales 2. variables globales 3. propriété

Les variables locales

Ce sont celles que l’on a vu jusqu’à présent. La valeur attribuée n’est valable que pour le gestionnaire qui l’utilise (entre le "on" et le "end")

Les variables globales

Pour garder une valeur d’un gestionnaire à l’autre, d’une animation à l’autre tant que la session Director est ouverte, on utilise des variables globales. La variable globale se distingue de la locale par sa déclaration. Le fait d’écrire : "global maVariable" rend pour le gestionnaire maVariable une valeur globale. Si dans un autre gestionnaire on a besoin de la valeur entrée dans cette variable on écrira "global maVariable" avant d’utiliser maVariable dans une commande ou fonction L’usage veut que les noms de variables globales commence par "g" : gMaVariable. Ainsi à la simple lecture du code on sait si la variable est globale ou non.

Les propriétés

Les propriétés sont un type de variabe particulier. c’est comme si une variable était affecté à un script particulier qui lui même est affecté à un objet (image-objet, acteur…) Les propriétés doivent être déclarées en haut de script avant les gestionnaires. On reconnaît les propriété car elles sont utilisées dans les script où "me" est utilisé. Par convention, les propriétés commencent par "p" : pMaVariable exemple en reprenant le précédent

----- script affecté à une image-objet --------
-- déclaration des propriétés
property pMonSprite -- le numéro de la piste où sera le sprite
property pMapositionH -- la position H du sprite en question
property pMaPositionV -- la position V du sprite en question
property pDoitBouger

on beginSprite me
-- on récupère le numéro du sprite
pMonSprite = sprite(me.spriteNum)
-- on récupère la position du sprite
pMapositionH = pMonSprite.locH
pMaPositionV = pMonSprite.locV
pDoitBouger = FALSE -- drapeau non actif
end beginSprite

on mouseUp me
-- quand on clique sur moi
-- on calcul le déplacement du sprite
 pMapositionH = pMapositionH + 5
 pMaPositionV = pMaPositionV - 5
 pDoitBouger = TRUE
end mouseUp

on exitFrame me
-- quand la tête de lecture va bouger
-- et donc rafraichir l'écran
-- on vérifie si le sprite est sur la scène
if pDoitBouger then
 bouge(pMonSprite, pMapositionH, pMapositionV)
 pDoitBouger = FALSE -- il a bougé
end if
end exitFrame
-- quelque part dans un script d'animation
on bougeH leSprite, posX , posY
set the loc of sprite leSprite = point(posX, posY)
end bougeH

Exercice

Exercice faire un calculateur Euro