Les tableaux

Un tableau est simplement un ensemble de de variables bien rangées et numérotées séquentiellement.

Avant d'attaquer les tableaux, il est nécessaire d'avoir compris le fonctionnement des variables.

Soit le code suivant, sur la première et unique image clé d'un unique calque d'une nouvelle animation :

Etagere=new Array() // initialisation
Etagere[0]="Un crayon" // Assignation d'une valeur au premier élément
trace (Etagere[0]) // affichage de cette même valeur (un crayon)

On peut accéder à des éléments de tableau non-initialisés sans erreur, mais évidemment, le résultat sera undefined :

Etagere=new Array()
trace (Etagere[334])

Déclaration et remplissage d'un tableau d'un même geste

Un petit exemple fait mieux comprendre qu'un long discours :

Etagere=new Array("Des crayons","du papier","Des feutres")
trace(Etagere[0]) // Des crayons
trace(Etagere[1]) // du papier
trace(Etagere[2]) // des feutres
trace(Etagere[3]) // undefined

Et voici une autre façon de procéder, sans utiliser var

Etagere=["Plume","Gomme","Stylo"]
trace(Etagere[0]) // Plume
trace(Etagere[1]) // Gomme
trace(Etagere[2]) // Stylo
trace(Etagere[3]) // undefined

Modification d'un tableau pré-rempli

Dans les deux cas précédents, l'initilalisation de base n'empêche pas d'ajouter ou de remplacer des éléments existants :

Etagere=["Plume","Gomme","Stylo"]
Etagere[2] = "Agenda"
Etagere[87] = "Carbone"
trace(Etagere[1]) // Gomme
trace(Etagere[2]) // Agenda
trace(Etagere[3]) // undefined
trace(Etagere[87]) // Carbone

Taille du tableau

length permet de connaître la taille du tableau. Attention : il compte les éléments à partir de 1. Je m'explique :

Etagere=["Plume","Gomme","Stylo"]
trace (Etagere.length)

Affiche 3 : les éléments [0], [1] et [2]

Mais attention encore :

Etagere=["Plume","Gomme","Stylo"]
trace (Etagere.length) // 3
Etagere[87] = "Carbone"
trace (Etagere.length) // 88 (éléments de 0 à 87, même si la plupart sont vides)

Parcourt du tableau, élément par élément

On peut alors parcourir les éléments du tableau avec une boucle for

Etagere=["Plume","Gomme","Stylo"]
Etagere[5] = "Tasse"
for(Ctr=0 ; Ctr<Etagere.length ; ++Ctr)
  {
  trace(Etagere[Ctr])
  }

Affiche :

Plume
Gomme
Stylo
undefined
undefined
Tasse

Utilisation de libellés à la place d'indices numériques

Comme on l'a vu, le code suivant est correct :

Vendeur = new Array()
Vendeur[0]="Alfred Muller"
Vendeur[1]="Bertrand Moussou"
Vendeur[2]="Charles Pergot"
trace (Vendeur[0])
trace (Vendeur[1])
trace (Vendeur[2])

Affiche :

Alfred Muller
Bertrand Moussou
Charles Pergot

Mais s'il s'agit de vendeux de trois villes bien définies, on peut alors écrire :

Vendeur["Paris"]="Alfred Muller"
Vendeur["Saint Tropez"]="Bertrand Moussou"
Vendeur["Lyon"]="Charles Pergot"

Mais on ne peut alors plus y accéder avec des indices numériques :

Vendeur = new Array()
Vendeur["Paris"]="Alfred Muller"
trace (Vendeur[0])
trace (Vendeur["Paris"])

Renvoie :

undefined
Alfred Muller

On pourrait alors penser à juste titre qu'on perd son temps et son énergie avec les tableaux. De simples variables feront l'affaire :

VendeurParis="Alfred Muller"
VendeurSaint_Tropez="Bertrand Moussou"
VendeurLyon="Charles Pergot"

Mais revenons tout de même à nos tableaux à iundices textuels : L'utilisation d'une ville non-répertoriée ne donne pas d'erreur, mais undefined :

Vendeur = new Array()
Vendeur["Paris"]="Alfred Muller"
trace (Vendeur["Genève"]) // undefined

Rien n'empêche (même si techniquement ce n'est pas très propre, propre...) de mélanger le numérique avec les textes :

Vendeur = new Array()
Vendeur["Paris"]="Alfred Muller"
Vendeur[0]="Bertrand Moussou"

Problèmes liés au length avec les indices textuels

Mais attention, car le length

trace (Vendeur.length)

renvoie 1 ! ce qui est évidemment bien malpratique... D'autant que :

Vendeur = new Array()
Vendeur["Paris"]="Alfred Muller"
Vendeur["Lyon"]="Jean Martin"
trace (Vendeur.length) // 0

Renvoie carrément 0 !

Illusion de la limite des tableaux

Contrairement à ce qu'on pourrait penser :

Etagere = new Array(2)

ne limite en aucun cas le nombre d'éléments à 2 !

Etagere = new Array(2)
Etagere[0]="Scotch"
Etagere[1]="Ciseaux"
Etagere[2]="Colle"
Etagere[3]="Papier"
trace (Etagere[3])
trace (Etagere.length)

Affiche bien :

Papier
4

Tableaux multi-dimensionnels

Attention : j'ai cru constater de très graves bugs avec la "multi-dimension" !!!

Simplement comme ceci :

Etagere = new Array()
Etagere[0,0]="Whisky"
Etagere[5784,1]="Gin"
Etagere[4,6,9]="Vodka"
trace (Etagere[0,0])
trace (Etagere[5784,1])
trace (Etagere[4,6,9])

Renvoie bien

Whisky
Gin
Vodka

Attention aux pièges liés à la multi-dimension de vos tableaux :

Etagere = new Array()
Etagere[0]="Whisky"
Etagere[0,0]="Gin"
Etagere[0,0,0]="Vodka"
trace (Etagere[0])
trace (Etagere[0,0])
trace (Etagere[0,0,0])
trace (Etagere.length)

Affiche :

Vodka
Vodka
Vodka
1

Bon, donc ça ne va pas, mais, contre toute attente, ceci ne va pas non plus :

Etagere = new Array()
Etagere[0,0]="Whisky"
Etagere[0,1]="Gin"
Etagere[0,2]="Vodka"
  Etagere[1,0]="Jus d'orange"
  Etagere[1,1]="Sirop de grenadine"
  Etagere[1,2]="Soda"

trace (Etagere[0,0]) // Jus d'orange
trace (Etagere[0,1]) // Sirop de grenadine
trace (Etagere[0,2]) // Soda
  trace (Etagere[1,0]) // Jus d'orange
  trace (Etagere[1,1]) // Sirop de grenadine
  trace (Etagere[1,2]) // Soda

trace (Etagere.length) // 3 !!!

Donc, pas de tableaux multi-dimensionnels ! Ou alors c'est moi qui n'ai rien compris...

---