11. Listes

Jeudi 11/1/24
448 Mots
3 Minutes

Avec Dart, vous avez la possibilité de créer des listes avec un type défini, des listes modifiables ou non modifiables (immutables)…

Lorsque vous déclarez une liste, vous pouvez lui assigner un type de données ou non. Si vous ne lui en donnez pas, cette liste acceptera n’importe quel type de variable et aura donc des données de type dynamic. Vous pourrez ainsi y ajouter des String, int, bool

Typage à la création

dart
var list = []; // <dynamic>

Si vous voulez cependant limiter le type d’éléments que contiendra votre liste, vous pouvez le préciser à la création de la liste.

dart
var stringList = <String>[]; // N'acceptera que des string
List<String> stringList = []; // Idem, écrit différement

Typage par le contenu Vous pouvez aussi les instancier directement avec du contenu. Si vous intégrez plusieurs types différents lors de la déclaration d’une liste, celle-ci acceptera tous les types de variables qui héritent d’ Object.

dart
var inventory = ['armor', 'sword', 'potion']; // <String>
var mixedType = ['armor', 3]; // <Object>
// <String>

Afficher les éléments

Vous pouvez afficher dans la console le contenu d’une liste avec la fonction print. Attention, si cette liste contient des objets, vous verrez “Instance of MonObjet”.

dart
var inventory = ['armor', 'sword', 'potion']; // <String>
print(inventory);
// La console affichera alors
// ['armor', 'sword', 'potion']

Si vous souhaitez afficher un contenu à un index particulier :

dart
print(inventory[0]);
// 'armor'

Méthodes

Les méthodes qui consistent à ajouter, supprimer, chercher un index, itérés restes assez classiques, je vais vous faire une petite liste non exhaustive de ce qu’il est possible de faire.

dart
inventory[0] = 'axe'; // remplace l'élément à l'index 0
inventory.add('axe'); // ajoute un élément à la fin de la liste
inventory.remove('axe'); // supprime l'élément correspondant
inventory.clear(); // vide la liste
inventory.indexOf('axe'); // retourne l'index (int) de l'élément

inventory.forEach((element) { print(element); }); // imprimera les elements
inventory.forEach((element) => print(element)); // idem en plus propre

inventory.length() // imprime la taille de la liste
inventory.isEmpty // indique si la liste est vide ou non

Cette liste inventory peut donc être modifée encore et encore…. Mais comment faire pour protéger cette liste ?

Liste immutable

Comme pour des variables, il faudra ajouter le mot clé const et/ou final.

Si vous connaissez les valeurs de la liste et que vous souhaitez qu’elle soit immutable :

dart
final inventory = const ['armor', 'sword', 'potion'];

Lorsque vous ne connaissez pas encore les valeurs de la liste à sa création :

dart
final inventoryUnModifiable = List.unmodifiable(inventory);

Combiner des listes

Pour combiner deux listes ou plus en une seule, c’est assez simple, il vous suffit de créer une 3e liste et d’utiliser le spread operator pour les intégrer.

dart
var inventory = ['armor', 'sword', 'potion']; // <String>
var loot = ['axe', 'shield']; // <String>
var newInventory = [...inventory, ...loot];

Les collections en Dart comporte encore d’autres éléments, nous les verrons dans un autre cours.