Comment utiliser l'objet Collection ?
Lorsqu'il est nécessaire de tenir trace de plusieurs objets créés dynamiquement, l'objet Collection s'avère être un allié précieux. Cet objet travaille sur des variables de types Variant, provoquant donc une certaine lenteur lors de l'accès aux éléments, en comparaison des tableaux dynamiques. Néanmoins, cet objet possède de meilleures performances que la gestion de tableau pour l'insertion ou la suppression d'éléments. D'autre part, l'objet Collection permet d'associer à chacun des éléments stockés une chaîne de caractère, dite clé, permettant un autre moyen d'accès aux éléments que par les habituels index. L'objet collection n'est pas la seule manière de gérer dynamiquement des données. D'autres structures dynamiques peuvent s'avérer plus appropriées lorsque certaines opérations spécifiques doivent être réalisées. Opérations de baseAprès avoir alloué un nouvel objet collection, les méthodes Add, Remove et Item permettent très simplement de gérer les objets. La manipulation de données dans cet objet a une différence principale avec la manipulation d'éléments d'un tableau : le premier indice référant à un élément est 1 et non 0. Il est aussi possible de déterminer le nombre d'éléments présents dans la collection à l'aide de la méthode Count Dans l'exemple suivant, nous montrons comment allouer un objet collection, ajouter et supprimer des éléments : Dim MyCollection As Collection Dim Value as Variant Dim i As Long
Set MyCollection = new Collection
MyCollection.Add 1 MyCollection.Add 3 MyCollection.Add 21
For Each Value in Mycollection Debug.Print Value Next Value
Debug.Print MyCollection.Item(3)
MyCollection.Add 14, , , 2
MyCollection.Remove 2
For i = MyCollection.Count To 1 Step -1 Debug.Print MyCollection.Item(i) Next i Une clé pour chaque élémentIl est parfois plus pratique de référer à un élément dans une collection par un nom attribué (ou clé) que par sa position dans la collection. Imaginez très simplement le cas d'une collection bibliothèque qui référence chaque livre. Si un lecteur veut un livre spécifique, il sera préférable de s'y référer par son ISBN que par un numéro sans autre signification. Les méthodes Add, Remove, Item permettent de référer à un élément par une telle clé. Voici une illustration de l'exemple proposé : Dim Title As String Dim Library As Collection Set Library = New Collection Library.Add "Hardcore Visual Basic", "978-1556156670" Library.Add "Internationalization with Visual Basic", "978-0672319778" Library.Add "Advanced Visual Basic 6: Power Techniques for Everyday Programs", "978-0201707120" On Error Resume Next Title = Library.Item("978-0672319778") If Err.Number = 0 Then Debug.Print "Livre disponible: " & Title Else Debug.Print "Livre indisponible" End If Title = Library.Item("978-0735617223") If Err.Number = 0 Then Debug.Print "Livre disponible: " & Title Else Debug.Print "Livre indisponible" End If On Error GoTo 0
Library.Remove "978-0672319778" Si les clés que vous employez sont purement numériques, certaines précautions doivent être prises. L'impact sur les performances de l'emploi de clé est minime : l'objet Collection emploie une table de hachage de sorte à rendre les opérations aussi rapides que possible. Des collections robustesTrès rapidement, on se rend compte que des données de types très différents pourraient être stockées, intentionnellement ou non, dans la collection. Il est souvent utile, pour la robustesse de l'application de s'assurer que les données ajoutées sont des données attendues. Afin d'offrir la même flexibilité que celle de l'objet Collection de base, tout en assurant la robustesse du nouvel objet, nous devrons réaliser les points suivants : - Réaliser des méthodes fortement typées
- Offrir un accesseur à la méthode masquée permettant le For Each
- Intégrer les vérifications nécessaires pour assurer l'intégrité des données
- Permettre à l'utilisateur d'ajouter une clé dans notre collection personnalisée
- Définir Item comme étant la méthode par défaut
Ceci est documenté dans les exemples Maison de paille, maison de bâtons et maison de briques de la MSDN. A noter toutefois une coquille : les boutons d'ajout et de suppression sont nommés cmdAddEmployee et cmdDeleteEmployee, mais les procédures événementielles correspondantes sont nommées cmdEmployeeAdd_Click et cmdEmployeeRemove_Click. L'opérateur "bang"Lorsque la clé est connue dès la conception de l'application, il est possible d'utiliser l'opérateur bang (dont le symbole est le point d'exclamation) afin d'accéder à l'élément voulu. Il est à noter que cet opérateur n'est généralement pas présent dans d'autres langages, ce qui peut poser des problèmes de portabilité. De plus, l'usage de cet opérateur n'est pas très répandu. Il est donc présenté ici à titre purement informatif. Dim a As Collection
Set a = new Collection
a.Add "My root node", "rootkey"
MsgBox a!rootkey Pour aller plus loin
Voir aussi : |