Aller au menu - Aller au contenu

Icône Variables et fonction trace()

Mise à jour : 08/07/2010
4 613 visites depuis 7 jours, dont 231 sur ce chapitre classé 39/786
Nous allons regarder sur des exemples simples comment fonctionnent les variables en AS 3.0
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Structure et commentaires

Tout langage informatique repose sur la gestion des variables, AS ne déroge pas à la règle.
Les variables sont là pour qu'on leur affecte des valeurs, numériques, textuelles, graphiques, ...
Il faut aussi savoir que chaque instruction en AS se termine par un ; ce qui permet de préciser à l'interpréteur AS que la ligne est finie, et qu'une nouvelle instruction commence.

En AS 3.0, il est obligatoire de déclarer les variables, ce qui était très optionnel à l'époque de l'AS 1.0. Il est aussi nécessaire de faire attention aux majuscules et minuscules, car l'AS est sensible à la casse. Ainsi si vous écrivez mavar et Mavar, Flash comprendra deux instructions différentes.
Voilà comment attribuer la valeur 5 à la variable mavar

Code : Actionscript
1
var mavar = 5;


Vous noterez que c'est l'opérateur = qui permet d'attribuer une valeur à une variable. On l'appelle opérateur d'assignement : il assigne la valeur de droite à la variable de gauche. :)

Vous constatez aussi qu'il est tout à fait autorisé en AS d'ajouter des espaces entre les différentes expressions, ainsi tous ces codes reviennent au même :

Code : Actionscript
1
2
3
var mavar = 5;
var mavar=5;
var mavar= 5 ;


Autre point important, il est possible de commenter votre code, et c'est même recommandé.
Deux techniques possibles, utiliser /* mon commentaire */ sur plusieurs lignes ou // mon commentaire sur une seule ligne.

Code : Actionscript
1
2
3
var mavar = 5; // On assigne 5 à mavar
/* Je blablate sur
plusieurs lignes */

Fonction trace()

Avant de faire quoique ce soit il faut que je vous présente la fonction trace(). C'est, à mon sens, la fonction la plus utile de AS ;)
Grâce à elle vous pourrez aisément construire, vérifier et déboguer vos scripts. trace() va nous permettre de savoir à tout moment ce qu'il y a dans nos variables !

Pour commencer créez un nouveau fichier Flash et tapez dans l'onglet action :

Code : Actionscript
1
trace("Hello World !");


Si vous exécutez cette animation (Ctrl+F11), vous constaterez que Flash ouvre une fenêtre nommée Sortie. C'est dans cette fenêtre que s'affichera le contenu de tous les arguments que vous passerez à la fonction trace.

Abordons dans la suite les trois types de variables les plus simples !
  • 1. Les numériques : int et Number
  • 2. Les chaines de caractères : String
  • 3. Les tableaux : Vector

Les numériques : int et Number

Type int



int est la contraction du mot anglais integer se traduisant par entier en français. Pour les moins aguerris d'entre vous en mathématiques, les nombres entiers sont les nombres de la forme ... -4, -3, -2, -1, 0, 1, 2, 3, 4 ...

En mathématiques, il y en a bien entendu une infinité, mais nos pauvres ordinateurs auront du mal pour aller si loin ;) Le type int peut en fait stocker tous les nombres entre - 2 147 483 648 (-231) et 2 147 483 647. En clair on a de la marge :D

Pause mathsSecret (cliquez pour afficher)

L'ensemble des entier relatifs se note et sa restriction aux nombres positifs s'appelle l'ensemble des entiers naturels et est notée \mathbb N.
Je pense qu'il saute aux yeux de tous que ces deux ensembles sont infinis (après chaque entier on peut en trouver un autre encore plus grand). Cependant les mathématiciens se sont interessés au nombre (pourtant infini) des éléments de \mathbb N et ils se sont posés une question : il y a-t-il plus de nombres dans \mathbb Z ou dans \mathbb N ? Je suis sûr que vous vous dites qu'il y a deux fois plus d'éléments dans \mathbb Z que dans \mathbb N : mais il n'en est rien, les deux ensembles ont la même taille :o
\mathbb N\mathbb Z
0 0
1 -1
2 1
3 -2
4 2
5 -3
6 3
... ...


En effet il est possible de trouver une relation associant de façon unique chaque élément d'un ensemble à un élément de l'autre, par exemple, la relation suivante :
A chaque entier naturel pair n on associe n/2 et à chaque entier impair k on associe -(k+1)/2

Je vous ai fait un tableau des premières valeurs à gauche et comme vous pouvez le constater Comme vous pouvez le constater il pourrait continuer encore longtemps et on aurait réussi à décrire tout \mathbb Z avec \mathbb N et vice et versa, ce qui veut dire en mathématiques que les deux ensembles ont la même taille :D
<div class="cleaner"> </div>



Voici trois possibilités pour déclarer notre variable de type int et pour lui donner une valeur (bien entendu ne mettez pas les trois lignes d'un coup dans Flash, mais l'une après l'autre) :

Code : Actionscript
1
2
3
var monEntier:int = new int(123); // La totale
var monEntier:int = 123;          // Plus court
var monEntier     = 123;          // Trop court


Comment est-il possible que la troisième ligne fonctionne alors qu'on ne précise pas le type de la variable ? En fait, Flash va détecter tout seul que 123 est un nombre et va lui même rajouter le :int. Malheureusement, dans certain cas, il risquerait de choisir un type qui ne convient pas : bref vous l'avez compris, on va préférez la solution intermédiaire :)

Code : Actionscript
1
2
var monEntier:int = 666;
trace(monEntier);                 // Affiche 666 dans la fenêtre Sortie


Une fois déclarée dans un type, n'essayez pas d'affecter un autre type de valeur à une variable ! Ça conduirait à une erreur du compilateur.
Essayez par exemple :
Code : Actionscript
1
2
var monEntier:int = new int(666);   // On créer une variable de type entière
monEntier = "Hello World !";        // Ce qu'on met entre guillemets c'est du texte



Voyons ce qu'on peut faire avec ces variables...
Commençons avec les opérations simples :

Code : Actionscript
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
var monEntier:int = 10;      //On déclare monEntieret on lui assigne 10 comme valeur
monEntier = monEntier + 5;    // on rajoute 5 à la variable
trace(monEntier)             // ce qui donne ... 15 !

monEntier = 10;              // Une fois déclarée, surtout ne pas remettre :int !
monEntier = monEntier - 5;   // En toute logique ...
trace(monEntier)             // ... ca donne 5

monEntier = 10;               // Remettons encore à 10 la variable
monEntier = monEntier * 5 ;   // on multiplie par 5 la variable
trace(monEntier)              // affiche 50

monEntier = 10;               // Remettons encore à 10 la variable
monEntier = monEntier / 2 ;   // On divise par 2
trace(monEntier)              // affiche 5

monEntier = monEntier / 2 ;   // On divise encore par 2
trace(monEntier)              // affiche ... 2 !!!


Mais, mais, mais ... :o Comment 5/2 peut-il faire 2 ?
Souvenez-vous, monEntier est une variable qui est typée int. Le résultat de la division doit donc être converti en entier avant d'être stocké dans monEntier. Pour cette conversion, Flash fait simple : il prend les chiffres qui sont avant la virgule !
Code : Actionscript
1
2
3
4
var monEntier:int = 1.6;
trace(monEntier);            // Renvoie 1
monEntier = -1.6;
trace(monEntier);            // Renvoie -1



Il existe d'autres opérateurs très intéressants, il permettent d'éviter de répéter monEntier dans le membre de droite.
Prenons un exemple :
Code : Actionscript
1
2
3
var monEntier:int= 10;
monEntier += 5;           // Ca revient au même que monEntier = monEntier + 5;
monEntier *= 5;           // Même chose que monEntier = monEntier * 5;

Ça va quand même plus vite, non ? :D
Bien entendu vous trouverez aussi les opérateurs -= et /=, opérateurs d'affectation de soustraction et d'affectation de division.

Pour être tout à fait complet, il me faut préciser que le type int a un petit frère : uint
En anglais il correspond à unsigned integer c'est à dire nombre entier non-signé en "français" :D
En fait il permet de stocker les nombres entiers naturels, c'est à dire positifs. A quoi ça sert ? Pourquoi ne pas toujours utiliser int ? Car en supprimant les nombres négatifs, on gagne de la place pour stocker de plus grands nombre : de 0 à 4 294 967 295 pour être précis ;)


Type Number



Nous avons vu comment enregistrer des entiers (naturels et relatifs), malheureusement beaucoup de quantités s'expriment avec des chiffres après la virgule dont les nombres décimaux (ceux avec un nombre fini de chiffres après la virgule). Le type correspondant à ces derniers est Number.

Pause maths
Secret (cliquez pour afficher)

Si vous avez bien suivi, nous avons réussi a enregistrer des entiers et des nombres décimaux.
Est-il possible de stocker des nombres rationnels ( l'ensemble est noté \mathbb{Q} ), c'est à dire les nombres qui peuvent se noter sous la forme d'une fraction p / q ?
Pour 5/2 (=2.5) c'est pas bien dur, le type Number suffit. Mais pour 10/3 (=3.33333...), il y a une infinité de décimales ! Il suffit en fait de créer deux variables entières : une pour le numérateur et l'autre pour le dénominateur ;)
Pour la petite histoire, \mathbb{Q} a la même taille que \mathbb{N} !

Par contre, l'ensemble des nombres réels \mathbb{R} lui ne fait pas la même taille que tous les ensembles que l'on a vu jusque là, il est beaucoup plus grand ! Il n'est d'ailleurs pas possible d'enregistrer la plupart des nombres qu'il contient dans une variable...



Bien entendu, tous les opérateurs vus jusque là s'appliquent encore :
Code : Actionscript
1
2
3
var monDecimal:Number = 5;
monDecimal /= 2;             // On divise 5 par 2
trace(monDecimal);           // et miracle, on trouve 2.5 !

Les chaines de caractères : String

Le type String permet d'enregistrer des chaînes de caractères, c'est-à-dire du texte.

Les nombres s'écrivent directement, mais les chaînes de caractères doivent être entourées de guillemets " ou d'apostrophes '


Déclarons un String, comme toujours dans l'ordre du plus académique au plus fainéant :D
Code : Actionscript
1
2
3
var maChaine:String = new String("Salut la compagnie"); // Académique
var maChaine:String = "Salut la compagnie";             // Pratique
var maChaine        = "Salut la compagnie";             // indécent ;)



Pour les nombres, nous avions des opérateurs mathématiques permettant d'effectuer des calculs.
Ici pas de maths (snifff :( ), mais un opérateur de concaténation. La concaténation permet de "coller" deux chaînes de caractères, en Flash on utilise le +.

C'est là que les problèmes commencent pour les maîtres du PHP, car en PHP on utilise le point . pour la concaténation. Attention à ne pas tout mélanger !


Exemple :
Code : Actionscript
1
2
3
var maChaine:String = "";              // On ne met rien pour l'instant
maChaine = "Salut" + " la compagnie";  // On concatène
trace(maChaine);                       // Ce qui donne "Salut la compagnie"


On aurait aussi pu donner la valeur "Salut" à machaine puis rajouter le reste après :
Code : Actionscript
1
2
var maChaine:String = "Salut";
maChaine += " la compagnie";



Supposons maintenant que vous vouliez mettre dans votre texte le caractère ". Ça risque d'être embêtant puisqu'on l'utilise déjà comme caractère délimitant la chaîne...
Encore une fois, on a plusieurs solutions.

On peut utiliser le caractère d'échappement \, en le plaçant devant le guillemet à échapper. On aurait donc :
Code : Actionscript
1
var maChaine:String = "Il m'a dit \"Bonjour !\" ";


Ou alors on peut utiliser l'apostrophe pour délimiter le texte, dans ce cas là il faudra échapper les apostrophes ;) :
Code : Actionscript
1
var maChaine:String = 'Il m\'a dit "Bonjour !" ';


Une petite question pour vous, que se passe-t-il si j'exécute le code suivant ?
Code : Actionscript
1
2
3
4
var maChaine:String = "Vive le pastis ";
var monEntier:int = 51;
maChaine = maChaine + monEntier;
trace(maChaine);



Comme Flash est malin, il va convertir automatiquement le type monEntier en chaine de caractères puis fait la concaténation. Cela-dit, il aurait été possible de faire cette opération explicitement grâce à la méthode toString() qui permet de convertir un nombre en texte :

Code : Actionscript
1
2
3
4
var maChaine:String = "Vive le pastis ";
var monEntier:int = 51;
maChaine = maChaine + monEntier.toString();
trace(maChaine);


Ne vous inquiétez pas si vous ne comprenez pas toute la syntaxe, nous y reviendrons :)

Les tableaux : Vector

Un peu d'histoire de l'AS
La gestion des tableaux peut fortement varier selon le langage de programmation que vous utilisez. On retrouve d'un côté des langages comme Javascript et PHP faiblement typés où les tableaux sont très simples à manier et de l'autre des langages plus robustes comme C et Java où les choses sont moins intuitives mais plus puissantes.
Flash a toujours été à cheval entre ces deux interprétations de ce que doit être la programmation et on ressent cette attitude bifide dans la gestion des tableaux : il en existe deux types !
  • Le type Array se rapproche des tableaux qu'on retrouve en Javscript qui ne sont ni fixés ni typés : en clair on peut mettre ce qu'on veut dedans et autant qu'on veut.
  • Le type Vector ressemble beaucoup plus aux tableaux de java par exemple. Bien qu'ils soient typés, il est possible de choisir si le nombre d'éléments doit être fixe ou non ce qui offre une grande flexibilité.

Pour ces raisons et histoire de ne pas alourdir inutilement ce cours, nous ne verrons que le type Vector.


Créer un objet Vector contenant des entier :
Code : Actionscript
1
var monVecteur:Vector.<int> = new Vector.<int>(); // Déclaration et instanciation de notre vecteur contenant des entiers


Comme vous pouvez le constater, la création de l'objet utilise une syntaxe particulière qui permet de préciser le type des données qui seront contenues dans le vecteur.

La construction de l'instance peut en fait être plus détaillée, puisqu'il est possible de préciser si le vecteur doit être fixé (c'est à dire si le nombre total d'éléments qu'il peut contenir doit être limité) :
Code : Actionscript
1
var monVecteur:Vector.<int> = new Vector.<int>(10, true); // On créé un vecteur étant limité à 10 entiers


Comment affecter des valeurs aux cellules du tableau ?

Dans tous les cas, la syntaxe avec les crochets [] fonctionne :
Code : Actionscript
1
2
3
4
5
var monVecteur:Vector.<int> = new Vector.<int>(3, true);
monVecteur[0] = 5;
monVecteur[1] = 10;
monVecteur[2] = 15;
trace(monVecteur);


Dans le cas des vecteurs à taille variable, il est possible d'utiliser la méthode push() qui rajoute un élément à la fin :
Code : Actionscript
1
2
3
4
5
var monVecteur:Vector.<int> = new Vector.<int>();
monVecteur.push(5);
monVecteur.push(10);
monVecteur.push(15);
trace(monVecteur);


Comment connaître le nombre d'entrées dans un tableau ?

Il vous faut utiliser la propriété length
Code : Actionscript
1
2
3
4
5
var monVecteur:Vector.<int> = new Vector.<int>();
monVecteur[0] = 5;
monVecteur[1] = 10;
monVecteur[2] = 15;
trace(monVecteur.length); // Affiche 3


On remarquera que dans le cas d'un tableau dont la taille est fixée, la longueur est constante. Même si des cellules sont vides, elles existent quand même !
Code : Actionscript
1
2
var monVecteur:Vector.<int> = new Vector.<int>(3, true);
trace(monVecteur.length); // Affiche 3 quand même !

Q.C.M.

Quelle ligne de code permet d'assigner l'entier 123 à la variable maVariable de façon à ne pas laisser de doute sur le type de la variable ?
Quelle sera la valeur numérique de compteur à la fin du script :

Code : Actionscript
1
2
3
var compteur:int = 10;
compteur = compteur + 5;
compteur -= 10;


Interdit de tricher en utilisant trace() ! :D
Quelle sera la valeur numérique de monnombre à la fin du script :

Code : Autre
1
2
3
4
var monnombre:Number = 10;
monnombre = monnombre + 5;
monnombre -= 10;
trace(monnombre+5);
Quelle sera la valeur numérique de compteur à la fin du script :

Code : Actionscript
1
2
3
var compteur:int = 15;
compteur = compteur - 5;
compteur / 3;


Interdit de tricher en utilisant trace() ! :D
Quelle sera la valeur numérique de compteur à la fin du script :

Code : Actionscript
1
2
3
var compteur:int = 15;
compteur = compteur - 5;
compteur = compteur / 3;


Interdit de tricher en utilisant trace() ! :D
Qu'affichera la fenêtre de sortie avec ce code ?

Code : Actionscript
1
2
var maChaine:String = "salut";
maChaine += maChaine + " les Zéros";
On a le code suivant
Code : Actionscript
1
2
3
4
5
6
var mesCaracteres:Vector.<String> = new Vector.<String>(5, true);
mesCaracteres[0] = " ";
mesCaracteres[1] = "pointu";
mesCaracteres[2] = "tu";
mesCaracteres[3] = "chapeau";
mesCaracteres[4] = "Turlu";


Quelle instruction faut-il rajouter pour afficher "Turlututu chapeau pointu" ?

Statistiques de réponses au QCM

Comme vous avez pu le constater dans cette partie, l'AS 3.0 diffère assez peu pour des exemples aussi simples des langages modernes comme Java ou C#.
Je ne peux donc que vous conseiller de souvent visiter l'aide, qui vous permettra de vous en sortir souvent sans aller demander du secours sur les forums. :p
Chapitre précédent Sommaire Chapitre suivant

Partager

29 commentaires pour "Variables et fonction trace()"
Note moyenne : 3.24 / 4 (137 votes)
Pseudo Commentaire
Hors ligne theo-sf # Posté le 17/04/2010 à 00:41:09

j ai macromedia flash 8 comme tu as dis que tu aller utiliser mais sa ne fait que le as1 et as2, j ai aussi la version d essai de cs4 mais sa m affiche plein d erreur bizarre
Hors ligne mickaelx4 # Posté le 19/04/2010 à 10:35:28
Avatar

Bonjour,

super tuto!! (merci^^)

je débute aussi mais je pense avoir trouver une réponse (j'utilise flash8) pour le message d'erreur concernant:
Code : Actionscript
1
2
3
var monEntier:int = 10; 
monEntier = monEntier + 5;
trace(monEntier)

erreur :Citation
var monEntier:int = 10; //On déclare monEntier et on lui assigne 10 comme valeur

Total des erreurs ActionScript : 1 Erreurs signalées : 1


remplacer par:

Code : Actionscript
1
2
3
var monEntier = int(10);      //On met le type int après le égale ce qui nous donne aussi 15
monEntier = monEntier + 5;
trace(monEntier)


Le résulta est le même et le reste du code reste inchangé.
En espérant avoir aidé et pas avoir induit en erreur ni raconter de bêtises.


édit:
sous flash8
Code : Actionscript
1
2
3
monEntier = 10;               // Remettons encore à 10 la variable
monEntier = monEntier / 2 ;   // On divise par 2
trace(monEntier)

renvoie 2.5

http://Mangazone.xoo.it/
Le forum francophone de tous les mangas !!!
 
Hors ligne funwarior # Posté le 11/02/2011 à 23:24:47

Yop !

Ya un piti problème sur le Vector, c'est que sous flash 8, ba ya pas la fonction :) On fait comment ^^

Moi je dis, faut qu'un pro refasse le tuto, ou le modifie ^^
Hors ligne toto_toto69 # Posté le 13/03/2012 à 18:52:54

Avis : Très bon

A propos d'une utilisation ratée de Flash : Spiral Connect http://spiralconnect.univ-lyon1.fr/
Ce site est l'exemple typique de ce qu'il ne faut pas faire. Ca rame et c'est moche, l'Université Lyon1 a payé très cher pour un boulet inutilisable.
Hors ligne albert_albert69 # Posté le 26/03/2012 à 15:50:36

Avis : Très bon

Je ne sais pas si le lieu est approprié mais je confirme que c'est un site très moche

Voir tous les commentaires