No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 34: Iterators (Varredura de Sistemas)
1. Narrativa
O mecha Æther possui dezenas de sensores que devem ser processados em sequência. Varredura de Sistemas é a técnica de percorrer coleções de dados elemento por elemento, aplicando transformações e filtros. O piloto experiente domina os iterators para processar streams de dados com eficiência e clareza.
2. Conceito
Iterators são objetos que representam sequências de dados. Em Rust, são lazy — só executam quando consumidos. Principais métodos:
- Adaptadores:
.map(),.filter(),.take(),.skip()— transformam iterators - Consumidores:
.collect(),.fold(),.sum()— produzem resultados finais - Busca:
.find(),.any(),.all()— verificam condições
3. Requisitos
- Criar funções que usam iterators para processar dados
- Encadear múltiplos adaptadores
- Usar consumidores para agregar resultados
4. Design de Dados
graph LR
A[Input: Vec<T>] --> B[.iter()]
B --> C[.map f]
C --> D[.filter pred]
D --> E[.collect]
E --> F[Output: Vec<U>]
5. Diagrama de Fluxo
flowchart TD
A[Início] --> B[Para cada elemento]
B --> C{ map-transformado}
C -->|Sim| D{ filter-passou?}
C -->|Não| F[Próximo]
D -->|Sim| G[Adicionar ao resultado]
D -->|Não| F
G --> F
F --> H{Mais elementos?}
H -->|Sim| B
H -->|Não| I[Fim]
6. Funções
| Função | Descrição |
|---|---|
duplicar_valores |
Dobra cada elemento via .map() |
filtrar_pares |
Mantém apenas números pares |
somar_tudo |
Soma todos os elementos com .fold() |
encontrar_maior |
Retorna primeiro maior que limiar |
contar_maiores |
Conta elementos acima do limiar |
comprimentos_nao_vazios |
Mapa de strings para seus tamanhos |
todos_positivos |
Verifica se todos são positivos |
primeiros_tres |
Retorna os 3 primeiros elementos |
7. Exemplo
let numeros = vec![1, 2, 3, 4, 5];
let resultado: Vec<_> = numeros
.iter()
.map(|x| x * 2)
.filter(|x| *x > 4)
.collect();
assert_eq!(resultado, vec![6, 8, 10]);
8. Missão
- Implementar
duplicar_valoresusando.iter().map().collect() - Implementar
filtrar_paresusando.iter().filter().collect() - Implementar
somar_tudousando.iter().fold() - Implementar
encontrar_maiorusando.iter().find() - Encadear
.filter().count()emcontar_maiores - Usar
.filter().map().collect()emcomprimentos_nao_vazios - Implementar
todos_positivoscom.all() - Implementar
primeiros_trescom.take().cloned().collect()
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
- Iterators são lazy — nada acontece até chamar um consumidor
.iter()produz referências,.into_iter()move (ownership).map()é um adaptador, não consome o iterator- Use
.cloned()quando precisar copiar valores de referências