fold, reduce e expansão
Agregue e achate iteráveis.
fold, reduce e expansão é uma aula grátis de Dart Academy no CoddyKit. Esta é a aula 2 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.
Agregando uma Coleção
Muitas vezes, você quer reduzir uma lista inteira a um único valor, como uma soma ou um máximo. O Dart oferece fold e reduce exatamente para isso. 🧮
Conheça reduce
reduce combina os elementos dois a dois usando sua função. Ele começa pelo primeiro item, portanto a lista não pode estar vazia.
var sum = [1, 2, 3, 4].reduce((a, b) => a + b);
print(sum); // 10reduce Transporta um Resultado
Cada etapa recebe o resultado acumulado e o próximo elemento. Pense em a como o acumulador que cresce ao longo do processo.
var max = [3, 9, 2].reduce((a, b) => a > b ? a : b);
print(max); // 9A Armadilha da Lista Vazia
Chamar reduce em uma lista vazia lança um StateError. Quando uma lista pode estar vazia, prefira fold.
Conheça fold
fold é parecido com reduce, mas você fornece um valor inicial. Essa semente define o tipo do resultado e trata listas vazias com segurança.
var total = [1, 2, 3].fold(0, (a, b) => a + b);
print(total); // 6fold Pode Alterar o Tipo
Como a semente define o tipo, fold pode transformar uma lista de inteiros em uma String, um Map ou qualquer outra coisa de que você precise.
var joined = [1, 2, 3].fold('', (a, b) => '$a$b');
print(joined); // 123fold é Seguro com Lista Vazia
Com uma lista vazia, fold simplesmente retorna a semente. Sem falha e sem precisar lembrar de um caso especial.
var s = <int>[].fold(0, (a, b) => a + b);
print(s); // 0reduce vs fold
Use reduce para uma combinação rápida, do mesmo tipo, em uma lista não vazia. Prefira fold quando precisar de uma semente ou de um novo tipo de resultado.
Conheça expand
expand mapeia cada elemento para um iterável e depois reúne todos em um único fluxo de valores. É map mais flatten.
var r = [1, 2].expand((n) => [n, n * 10]);
print(r.toList()); // [1, 10, 2, 20]Achate Listas Aninhadas
Uma tarefa comum para expand é achatar uma lista de listas em uma única lista plana com uma chamada simples.
var flat = [[1, 2], [3, 4]].expand((x) => x);
print(flat.toList()); // [1, 2, 3, 4]Encadeando os Três
Esses métodos se compõem muito bem. Você pode usar expand para achatar e depois fold para agregar, em um único fluxo de processamento legível.
var t = [[1, 2], [3]].expand((x) => x).fold(0, (a, b) => a + b);
print(t); // 6Verificação Rápida
Escolha a ferramenta certa para uma soma segura com lista vazia.
Recapitulação
reduce combina, fold combina usando uma semente e expand achata. Juntos, eles agregam qualquer coleção com facilidade. 🎉
Perguntas Frequentes
A aula “fold, reduce e expansão” é grátis?
Sim — o texto completo de “fold, reduce e expansão” é 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 “fold, reduce e expansão”?
Agregue e achate iteráveis. 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 2 de 4.
Quanto tempo leva a aula “fold, reduce e expansão”?
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