11. Listes


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

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.

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.

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”.

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

Si vous souhaitez afficher un contenu à un index particulier :

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.

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 :

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

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

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.

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.