Initialisation et typage des collections
Dans l'écosystème Flutter et Dart, la classe List constitue la collection séquentielle par défaut pour stocker des données ordonnées. La déclaration peut être statique ou dynamique selon le besoin de l'application et les contraintes mémoire.
// Exemple de création avec différents modes d'instanciation
void démonstrationInitialisation() {
// Tableau à taille fixe (non extensible)
final List<int> dimensionFixe = List<int>.filled(4, 0);
dimensionFixe[0] = 42;
// Liste évolutive (mode par défaut)
var dynamique = <String>[];
dynamique.add('Alpha');
// Distinction entre copies profondes et références
final prototype = [1, 2, 3];
final copieImmuable = List<int>.unmodifiable(prototype);
// copieImmuable[0] = 99; // Erreur à l'exécution
final copieMutable = List<int>.from(prototype);
copieMutable.replaceAll((val) => val * 2);
// Remplissage via générateur
final séquenceGénérée = List<double>.generate(5, (index) => index.toDouble());
print(séquenceGénérée);
// Attributs intégrés
print('Longueur : ${séquenceGénérée.length}');
print('Premier/Dernier : ${séquenceGénérée.first} / ${séquenceGénérée.last}');
print('État vide ? : ${séquenceGénérée.isNotEmpty}');
}
Interrogasion et extraction de sous-ensembles
L'accès aux données et leur conversion vers d'autres structures de données sont gérés via des méthodes natives optimisées. Il est crucial de distinguer l'interrogation booléenne de l'extraction indexée pour garantir les performances.
// Méthodes de consultation et de filtrage
void consulterCollection() {
var palette = ['rouge', 'vert', 'bleu', 'jaune', 'vert'];
// Formatage et conversion
print(palette.join(' | '));
print(palette.toSet());
// Vérification d'appartenance
print('Présence du vert ? : ${palette.contains("vert")}');
// Navigation par indice
print('Objet à l\'index 3 : ${palette.elementAt(3)}');
print('Position première/dernière occurrence : ${palette.indexOf("vert")} / ${palette.lastIndexOf("vert")}');
// Extraction partielle (sous-liste)
final segmentCentral = palette.sublist(1, 3);
final suffixe = palette.sublist(3);
print('Segments : $segmentCentral → $suffixe');
}
Insertion et fusion de données
L'ajout de nouveaux nœuds peut se faire en queue, en tête ou à un emplacement spécifique. Les opérations synchrones permettent également de fusionner deux collections distinctes directement dans le même flux.
// Logique d'insertion positionnée
void ajouterDesNœuds() {
var conteneur = <dynamic>['initial'];
// Placement à la fin
conteneur.add('terminal');
// Placement à un indice précis
conteneur.insert(0, 'début');
// Fusion de multiples valeurs
final lotB = ['m', 'n'];
conteneur.addAll(lotB);
conteneur.insertAll(2, lotB);
print('État final : $conteneur');
}
Suppression et remplacemant par plages
La gestion du cycle de vie des éléments implique de cibler des valeurs uniques, des positions absolues ou des conditions logiquse. Le remplacement incrémental est essentiel pour maintenir l'intégrité des indices lors de transformations.
// Stratégies de nettoyage et de réécriture
void gérerSuppressions() {
var série = [1, 2, 3, 4, 5, 6];
// Cibles unitaires
série.remove(2); // Par valeur
série.removeAt(0); // Par position
série.removeLast();
// Opérations sur des intervalles
var fragment = [10, 20, 30, 40, 50];
fragment.replaceRange(1, 3, ['X', 'Y', 'Z']);
print('Remplacement plage : $fragment');
// Filtrage conditionnel avancé
var motsClés = ['alpha', 'beta', 'gamma'];
motsClés.removeWhere((item) => item.length > 4);
print('Résultat filtré : $motsClés');
}
Transformation et algorithmes de tri
Les listes Dart intègrent des méthodes natives pour modifier l'ordre des éléments ou appliquer des règles de comparaison personnalisées, ce qui facilite le traitement de grands volumes de données sans recourir à des bibliothèques externes.
// Fonctions de modification in-place
void appliquerTransformations() {
var alphabet = ['a', 'b', 'c', 'd'];
// Écrasement synchronisé sans varier la capacité globale
alphabet.setAll(1, ['1', '2', '3']);
// Mélange aléatoire (shuffling)
var scores = [100, 200, 50, 75];
scores.shuffle();
// Tri par défaut et comparateur custom
var longueurs = ['minuscule', 'grand', 'normal'];
longueurs.sort((a, b) => a.length.compareTo(b.length));
print('Triage par taille : $longueurs');
var numérique = [3, -8, 12];
numérique.sort();
print('Triage croissant : $numérique');
}