No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 35: Métodos Encadeados (Encadeamento de Sistemas)
1. Narrativa
O mecha Æther precisa configurar seus subsistemas em sequência fluida — cada ajuste no reator prepara o próximo estágio. Encadeamento de Sistemas é a técnica de conectar métodos onde cada um retorna a instância modificada, permitindo pipelines de configuração e transformação de dados. O piloto que domina o encadeamento escreve código expressivo e legível.
2. Conceito
Method chaining é o padrão onde cada método retorna &mut Self (ou Self), permitindo chamadas encadeadas como obj.metodo_a().metodo_b().metodo_c(). Em Rust, aparece em:
- Builder pattern: Configuração fluente de objetos com
&mut Self - Iterator pipelines:
.map().filter().collect()— transformações encadeadas - Option/Result chaining:
.and_then()— fluxos de dados opcionais - Transformação fluente: Pipeline de dados com zero alocações intermediárias
3. Requisitos
- Criar struct com builder pattern encadeável
- Usar encadeamento de iterators para pipeline de dados
- Aplicar chaining com Option para busca encadeada
4. Design de Dados
graph LR
A[Reator::novo] --> B[.definir_potencia]
B --> C[.definir_temperatura]
C --> D[.ativar]
D --> E[Reator configurado]
5. Diagrama de Fluxo
flowchart TD
A[Início] --> B[Ler temperatura]
B --> C{ > 500°C?}
C -->|Sim| D[Etiqueta: CRITICA]
C -->|Não| E{ > 100°C?}
E -->|Sim| F[Etiqueta: ALTA]
E -->|Não| G[Descartar]
D --> H[Adicionar ao resultado]
F --> H
G --> I{Mais leituras?}
H --> I
I -->|Sim| B
I -->|Não| J[Fim]
6. Funções
| Função | Descrição |
|---|---|
Reator::novo |
Cria reator com valores padrão |
Reator::definir_potencia |
Define potência MW (encadeável) |
Reator::definir_temperatura |
Define temperatura alvo (encadeável) |
Reator::ativar |
Ativa o reator (encadeável) |
Reator::obter_potencia |
Retorna potência configurada |
Reator::esta_ativo |
Verifica se reator está ativo |
classificar_temperaturas |
Pipeline .map().filter().collect() |
transformar_dados |
Pipeline .map().map().filter().collect() |
processar_sensores |
Pipeline .filter().map().fold() |
buscar_config |
Encadeamento Option com .and_then() |
normalizar_nomes |
Pipeline de strings .map().map().collect() |
7. Exemplo
// Builder pattern encadeado
let reator = Reator::novo()
.definir_potencia(500)
.definir_temperatura(300)
.ativar();
// Iterator pipeline encadeado
let resultado: Vec<_> = vec![100, 300, 600]
.into_iter()
.filter(|&t| t > 100)
.map(|t| if t >= 500 { "CRITICA" } else { "ALTA" })
.collect();
8. Missão
- Implementar
Reator::definir_potenciaretornando&mut Self - Implementar
Reator::definir_temperaturaretornando&mut Self - Implementar
Reator::ativarretornando&mut Self - Implementar
classificar_temperaturascom.filter().map().collect() - Implementar
transformar_dadoscom.map().filter().collect() - Usar
.filter().map().fold()emprocessar_sensores - Usar
.and_then()embuscar_configpara encadeamento Option - Implementar
normalizar_nomescom.map().map().collect()
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
- Builder pattern: cada setter retorna
&mut Selfpara permitir chaining - Iterator pipelines são lazy — só executam no consumidor final
.and_then()em Option é ideal para encadear operações que podem falhar — e preservaNone → None(se a entrada forNone, o resultado éNone, sem fallback). Evite.or()aqui: ele devolveria o fallback mesmo quando a entrada éNone, quebrando o contrato debuscar_config- Use
&mut selfquando quer modificar e encadear;&selfpara consultas