Itérables paresseux et générateurs avec sync*
Produire des valeurs à la demande
Itérables paresseux et générateurs avec sync* est une leçon Dart Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Dart Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Dart Academy comprend 4 leçons au total.
Que signifie paresseux ?
Un itérable paresseux ne calcule ses valeurs que lorsque vous les demandez réellement. Le travail se fait à la demande, et non en une seule fois. 🦥
Les itérables sont paresseux
Des méthodes comme map et where renvoient un Iterable paresseux. Rien ne s’exécute tant que vous n’itérer pas dessus ou n’appelez pas toList.
var it = [1, 2, 3].map((n) {
print('seen $n');
return n * 2;
});Rien ne s’exécute encore
Tant que vous ne consommez pas cet itérable, le corps de map ne s’exécute jamais. La paresse vous permet de décrire le travail et d’en différer le coût.
for (var x in it) print(x); // now it runsPourquoi la paresse est utile
La paresse évite du travail lorsque vous n’avez besoin que de quelques résultats. Associée à take, elle vous permet de vous arrêter tôt et d’ignorer le reste.
var first2 = it.take(2).toList();Découvrez les générateurs sync*
Une fonction sync* est un générateur qui construit un Iterable paresseux. Elle produit les valeurs une par une, à mesure qu’elles sont demandées.
Iterable<int> count(int n) sync* {
for (var i = 1; i <= n; i++) yield i;
}Le mot-clé yield
Dans un générateur, yield renvoie une valeur à l’appelant, puis se met en pause jusqu’à ce que la valeur suivante soit nécessaire.
print(count(3).toList()); // [1, 2, 3]Séquences infinies
Comme les valeurs sont produites paresseusement, un générateur peut décrire sans risque une séquence infinie, tant que vous n’en prenez qu’une portion finie.
Iterable<int> naturals() sync* {
var i = 0;
while (true) yield ++i;
}Prendre une portion finie
Associez un générateur infini à take pour obtenir uniquement ce dont vous avez besoin. La boucle s’arrête dès que votre portion est remplie.
print(naturals().take(5).toList()); // [1, 2, 3, 4, 5]yield* délègue
Utilisez yield* pour émettre chaque valeur d’un autre itérable ou générateur. Cela aplatit une séquence dans la séquence actuelle.
Iterable<int> both() sync* {
yield* count(2);
yield* count(2);
}Générateurs ou création de listes
Un générateur évite de construire une liste complète en mémoire. Vous diffusez les valeurs au fil de l’eau, ce qui garde les grandes séquences ou les séquences sans fin peu gourmandes en mémoire.
sync* ou async*
Utilisez sync* pour les itérables synchrones et paresseux. Son équivalent asynchrone, async*, produit un Stream pour les séquences d’événements asynchrones.
Vérification rapide
Testez votre compréhension des générateurs.
Récapitulatif
Les itérables sont paresseux et les générateurs sync* produisent leurs valeurs à la demande. Vous pouvez ainsi modéliser à peu de frais même des séquences infinies. 🌟
Apprends Dart avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 30
- Leçons
- 120
Questions Fréquemment Posées
La leçon « Itérables paresseux et générateurs avec sync* » est-elle gratuite ?
Oui — le texte complet de « Itérables paresseux et générateurs avec sync* » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Dart Academy, passe à CoddyKit PRO. Le cours Dart Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Itérables paresseux et générateurs avec sync* » ?
Produire des valeurs à la demande Tu pratiques Dart Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Dart Academy ?
Aucune expérience préalable n'est requise. Dart Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Itérables paresseux et générateurs avec sync* » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Dart Academy ?
Oui. Chaque leçon Dart Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Fonctions d’ordre supérieur et curryfication
- fold, reduce et expansion
- Itérables paresseux et générateurs avec sync*
- Composer des pipelines de fonctions pures