Small Basic - Les Bases : Les Tableaux (fr-FR)
Cet article traite de l'utilisation de base des tableaux en Small Basic.
Qu'est-ce qu'un Tableau
Un tableau est une variable qui stock une collection de données. Généralement ces données stockées sont de même type, par exemple une liste de noms de personnes ou la position de différents sprite dans un jeu.
Un tableau à un index et une valeur pour chaque élément du tableau. L'index est généralement juste un nombre et la valeur est la donnée stockée dans le tableau. La notation utilisée par Small Basic est de placer l'index d'un élément du tableau entre crochets ("[...]").
Voici un exemple d'affectation, où on attribue la valeur 5 à la donnée du tableau 'my_array' à l'index 1.
my_array[1 ] = 5
Voici un exemple d'instruction affectant la valeur du tableau 'my-array' à l'index 1, dans la variable 'result'. Après cette instruction 'result' contiendra la valeur 5.
result = my_array[1]
Les tableaux sont particulièrement utiles lorsqu'ils sont utilisés avec des indices numériques venant d'une boucle 'For'. Par exemple, les deux blocs de codes suivant sont équivalents et initialisent un tableau avec 10 "balles".
balls[1 ] = Shapes.AddEllipse(20,20)
balls[2 ] = Shapes.AddEllipse(20,20)
balls[3 ] = Shapes.AddEllipse(20,20)
balls[4 ] = Shapes.AddEllipse(20,20)
balls[5 ] = Shapes.AddEllipse(20,20)
balls[6 ] = Shapes.AddEllipse(20,20)
balls[7 ] = Shapes.AddEllipse(20,20)
balls[8 ] = Shapes.AddEllipse(20,20)
balls[9 ] = Shapes.AddEllipse(20,20)
balls[10 ] = Shapes.AddEllipse(20,20)
For i = 1 To 10
balls[i ] = Shapes.AddEllipse(20,20)
EndFor
Fonctionnalités Spéciales des Tableaux Small Basic
Effacer un tableau ou un élément du tableau
Pour effacer un élément du tableau il suffit de lui affecter la valeur "". L'élément sera supprimé du tableau.
my_array[5 ] = ""
A noter que cela peut provoquer un 'trou' dans l'indexation du tableau, par exemple si vous supprimez l'élément 5 dans un tableau avec 10 éléments, alors le tableau contiendra 9 éléments indexés par 1, 2, 3, 4, 6, 7, 8, 9 et 10.
Il faut également noter que si un élément du tableau est une forme (shape) de GraphicsWindow, alors la forme en elle-même ne sera pas supprimée, seul son nom est sotcké dans le tableau.
Un tableau peut être entièrement effacé si on lui affecte la valeur "".
my_array = ""
Copier les tableaux
Un tableau entier peut être copié vers un autre tableau simplement en l'affectant en utilisant '='.
copy_array = my_array
Les Méthodes des Tableaux
Il existe plusieurs méthodes dans la classe 'Array', l'une des plus utiles retourne la taille (le nomrbre d'éléments) d'un tableau.
size = Array.GetItemCount(my_array)
Les méthodes ContainsIndex et ContainsValue testent simplement si la présence d'un index ou d'une valeur spécifiée dans le tableau.
Index Non Numérique
Dans Small Basic l'index n'est pas forcément un nombre entier. Ils doivent obligatoirement être uniques - 2 éléments d'un tableau ne peuvent pas avoir le même index.
L'avantage d'un index non numérique est qu'un autre type d'index peut être plus naturel, par exemple les âges de personne indexés par leur nom.
age["Fred" ] = 14
age["Mary" ] = 12
age["John" ] = 22
L'inconvénient est que l'on ne peut pas facilement parcourir tous les éléments du tableau dans une boucle 'For'. C'est également vrai pour les tableaux où quelques éléments ont été supprimés ou tout tableaux dont les indices ne sont pas contigus (ne se suivent pas). Heureusement pour de tels cas nous avons la possibilité d'obtenir un tableau contenant la liste de tous les indices présents. Ce nouveau tableau est indexé séquentiellement par des entiers commençant par 1, et chaque valeur correspondant à l'index du tableau d'origine.
Dans l'exemple suivant, 'indices' est un tableau contenant les indices du tableau 'age'. Ensuite nous affichont le nom et l'âge de chaque personne grâce à une boucle 'For'.
indices = Array.GetAllIndices(age)
For i = 1 To Array.GetItemCount(indices)
name = indices[i]
TextWindow.WriteLine(name+ " à " +age[name]+ " ans" )
EndFor
Tableaux Multi-dimensionels
Il est facile d'utiliser des tableaux avec plus d'une dimension, il suffit simplement d'ajouter plus d'indice entre crochets, mais soyez vigilant car ils ne doivent pas devenir trop gros (voit Structure Interne et Performance).
contact["Fred"]["age" ] = 14
contact["Fred"]["sex" ] = "M"
contact["Fred"]["email" ] = "fred@email.com"
contact["Mary"]["age" ] = 12
contact["Mary"]["sex" ] = "F"
contact["Mary"]["email" ] = "mary@email.com"
Structure Interne et Performance
Tous les tableaux dans Small Basic sont actuellement stockés comme une chaîne de caractères constituée des indices et des valeurs, et en interne dans une structure de type dictionnaire. Ceci permet l'indexation par des non entiers et le typage simple des variables utilité par Small Basic, mais celà à un impact sur la performance. Rechercher un élément d'un tableau depuis un index qui n'est pas un entier est un processus lent, nécessitant une recherche complète dans le tableau à chaque fois que l'on accède à un élément. Les gros tableaux, en particulier les tableaux multi-dimensionnels, ayant plus de 100 éléments commencent à devenir lents, et deviennent êtrement lents avec plusieurs centaines d'éléments.
Parfois, une connaissance du format de l'indexation des chaînes peut être utile. De base le format de chaque élément est "index=value". Par exemple, pour le tableau 'age' utilisé précédemment apparaît comme une chaîne "Fred=14;Mary=12;John=22;". Ce qui peut être utilisé pour initialiser le tableau.
age = "Fred=14;Mary=12;John=22;"
Voir Egalement
- Voir Small Basic: Extensions de Liste (en-US) - pour des alternatives aux tableaux.