🧩 Exercícios: Closures, Functores e Programação Funcional
Spec Sistemas Com Rust • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 14.1 — Sintaxe de Closures (|x| x + 1) e Inferência de Tipos
| Contexto: Sintaxe de Closures ( | x | x + 1) e Inferência de Tipos no contexto de Closures, Functores e Programação Funcional. |
Requisitos de Execução:
- Criar closure que capture variável local e transforme lista com
.map().
Resultado Esperado
Closure anônima executada com captura de contexto.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_1_SeuNome - Envie na tarefa:
Atividade Cap 14 - Closures, Functores e Programação Funcional
🔑 Gabarito de Código & Solução Comentada
// closures_basic.rs
fn main() {
let fator = 3;
let multiplicar = |x: i32| x * fator;
println!("Resultado: {}", multiplicar(10));
}
🔍 Nível 2: Prática
Problema 14.2 — Captura por Movimento com a Palavra-chave move
Contexto: Captura por Movimento com a Palavra-chave move no contexto de Closures, Functores e Programação Funcional.
Requisitos de Execução:
- Forçar a transferência de ownership de variáveis capturadas para a closure usando
move ||.
Resultado Esperado
Closure com move transferindo ownership de recursos com segurança.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_2_SeuNome - Envie na tarefa:
Atividade Cap 14 - Closures, Functores e Programação Funcional
🔑 Gabarito de Código & Solução Comentada
// closure_move.rs
fn main() {
let dados = vec![1, 2, 3];
let closure = move || {
println!("Dados dentro da closure: {:?}", dados);
};
closure();
}
⚡ Nível 3: Integração
Problema 14.3 — Traits de Closures: Fn, FnMut e FnOnce
Contexto: Traits de Closures: Fn, FnMut e FnOnce no contexto de Closures, Functores e Programação Funcional.
Requisitos de Execução:
- Criar função que aceite closure mutável
F: FnMut()para alteração de estado acumulado.
Resultado Esperado
Closure FnMut mutando estado interno a cada invocação.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_3_SeuNome - Envie na tarefa:
Atividade Cap 14 - Closures, Functores e Programação Funcional
🔑 Gabarito de Código & Solução Comentada
// fn_mut_trait.rs
fn executar_duas_vezes<F: FnMut()>(mut f: F) {
f(); f();
}
fn main() {
let mut contador = 0;
executar_duas_vezes(|| { contador += 1; });
println!("Contador acumulado: {}", contador);
}
🏆 Nível 4: Desafio Corporativo
Problema 14.4 — Retorno de Closures com Box<dyn Fn()>
Contexto: Retorno de Closures com Box<dyn Fn()> no contexto de Closures, Functores e Programação Funcional.
Requisitos de Execução:
- Criar função geradora de calculadoras retornando trait object
Box<dyn Fn(i32) -> i32>.
Resultado Esperado
Closure empacotada no heap e retornada como função de alta ordem.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_4_SeuNome - Envie na tarefa:
Atividade Cap 14 - Closures, Functores e Programação Funcional
🔑 Gabarito de Código & Solução Comentada
// return_closure.rs
fn criar_somador(incremento: i32) -> Box<dyn Fn(i32) -> i32> {
Box::new(move |x| x + incremento)
}
fn main() {
let somar_10 = criar_somador(10);
println!("Somado: {}", somar_10(5));
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |