Iteráveis Preguiçosos e Geradores com sync*
Produza valores sob demanda.
Iteráveis Preguiçosos e Geradores com sync* é uma aula grátis de Dart Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Dart Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Dart Academy inclui 4 aulas no total.
O Que Significa Preguiçoso
Um iterável preguiçoso não calcula seus valores até que você realmente os solicite. O trabalho acontece sob demanda, não todo de uma vez. 🦥
Iteráveis São Preguiçosos
Métodos como map e where retornam um Iterable preguiçoso. Nada é executado até que você itere ou chame toList.
var it = [1, 2, 3].map((n) {
print('seen $n');
return n * 2;
});Nada é Executado Ainda
Enquanto você não consumir esse iterável, o corpo de map nunca será executado. A avaliação preguiçosa permite descrever o trabalho e adiar o custo.
for (var x in it) print(x); // now it runsPor Que a Avaliação Preguiçosa Ajuda
A avaliação preguiçosa economiza trabalho quando você precisa de apenas alguns resultados. Combinada com take, permite parar cedo e ignorar o restante.
var first2 = it.take(2).toList();Conheça os Geradores sync*
Uma função sync* é um gerador que cria um Iterable preguiçoso. Ela produz valores um de cada vez, conforme são solicitados.
Iterable<int> count(int n) sync* {
for (var i = 1; i <= n; i++) yield i;
}A Palavra-chave yield
Dentro de um gerador, yield devolve um valor ao chamador e pausa até que o próximo valor seja necessário.
print(count(3).toList()); // [1, 2, 3]Sequências Infinitas
Como os valores são preguiçosos, um gerador pode descrever com segurança uma sequência infinita, desde que você use apenas uma parte finita dela.
Iterable<int> naturals() sync* {
var i = 0;
while (true) yield ++i;
}Obtendo uma Parte Finita
Combine um gerador infinito com take para obter apenas o que precisa. O laço para no instante em que sua parte está preenchida.
print(naturals().take(5).toList()); // [1, 2, 3, 4, 5]yield* Encaminha Valores
Use yield* para emitir todos os valores de outro iterável ou gerador. Ele incorpora uma sequência à sequência atual.
Iterable<int> both() sync* {
yield* count(2);
yield* count(2);
}Geradores em vez de Criar Listas
Um gerador evita criar uma lista completa na memória. Você transmite os valores, mantendo sequências grandes ou intermináveis econômicas em memória.
sync* vs async*
Use sync* para iteráveis preguiçosos síncronos. Sua versão assíncrona, async*, produz um Stream para sequências de eventos assíncronos.
Verificação Rápida
Teste sua compreensão sobre geradores.
Recapitulação
Iteráveis são preguiçosos, e os geradores sync* produzem valores sob demanda. Isso permite modelar até sequências infinitas de forma econômica. 🌟
Perguntas Frequentes
A aula “Iteráveis Preguiçosos e Geradores com sync*” é grátis?
Sim — o texto completo de “Iteráveis Preguiçosos e Geradores com sync*” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Dart Academy, atualize para CoddyKit PRO. O curso de Dart Academy inclui 4 aulas no total.
O que vou aprender em “Iteráveis Preguiçosos e Geradores com sync*”?
Produza valores sob demanda. Você pratica Dart Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Dart Academy?
Nenhuma experiência prévia é necessária. Dart Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Iteráveis Preguiçosos e Geradores com sync*”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Dart Academy?
Sim. Cada aula de Dart Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Funções de Ordem Superior e Currying
- fold, reduce e expansão
- Iteráveis Preguiçosos e Geradores com sync*
- Composição de Pipelines de Funções Puras