Spec Sistemas Com Rust • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 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:

  1. 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)

  1. Salve o arquivo como: Atividade_14_1_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_14_2_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_14_3_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_14_4_SeuNome
  2. 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