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


🎯 Nível 1: Fundamentos

Problema 10.1 — Enums com Dados Associados e Pattern Matching com match

Contexto: Enums com Dados Associados e Pattern Matching com match no contexto de Enums, Option, Result e Pattern Matching.

Requisitos de Execução:

  1. Declarar enum Mensagem com variantes contendo tuplas e structs e desestruturar no match.

Resultado Esperado

Enum com dados associados processado exaustivamente no match.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_10_1_SeuNome
  2. Envie na tarefa: Atividade Cap 10 - Enums, Option, Result e Pattern Matching
🔑 Gabarito de Código & Solução Comentada
// enums_match.rs
enum Comando {
    Sair,
    Mover { x: i32, y: i32 },
    Escrever(String),
}

fn processar(cmd: Comando) {
    match cmd {
        Comando::Sair => println!("Comando: Sair"),
        Comando::Mover { x, y } => println!("Mover para ({}, {})", x, y),
        Comando::Escrever(msg) => println!("Texto: {}", msg),
    }
}

fn main() {
    processar(Comando::Mover { x: 10, y: 20 });
}

🔍 Nível 2: Prática

Problema 10.2 — Tratamento Seguro com Option e if let

Contexto: Tratamento Seguro com Option e if let no contexto de Enums, Option, Result e Pattern Matching.

Requisitos de Execução:

  1. Utilizar if let Some(valor) = buscar() para tratamento conciso de valores opcionais.

Resultado Esperado

Valor opcional desestruturado com a sintaxe if let.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_10_2_SeuNome
  2. Envie na tarefa: Atividade Cap 10 - Enums, Option, Result e Pattern Matching
🔑 Gabarito de Código & Solução Comentada
// option_if_let.rs
fn obter_ip() -> Option<&'static str> {
    Some("192.168.1.1")
}

fn main() {
    if let Some(ip) = obter_ip() {
        println!("IP conectado: {}", ip);
    }
}

⚡ Nível 3: Integração

Problema 10.3 — Tratamento de Erros com Result<T, E> e Operador de Propagação ?

Contexto: Tratamento de Erros com Result<T, E> e Operador de Propagação ? no contexto de Enums, Option, Result e Pattern Matching.

Requisitos de Execução:

  1. Criar função de divisão segura retornando Result<f64, &'static str> e propagar erros com ?.

Resultado Esperado

Erros tratados e propagados com operador de ponto de interrogação.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_10_3_SeuNome
  2. Envie na tarefa: Atividade Cap 10 - Enums, Option, Result e Pattern Matching
🔑 Gabarito de Código & Solução Comentada
// result_operator.rs
fn dividir(a: f64, b: f64) -> Result<f64, &'static str> {
    if b == 0.0 { Err("Divisao por zero!") } else { Ok(a / b) }
}

fn operacao() -> Result<f64, &'static str> {
    let r = dividir(100.0, 2.0)?;
    Ok(r * 2.0)
}

fn main() {
    match operacao() {
        Ok(v) => println!("Resultado: {}", v),
        Err(e) => println!("Falha: {}", e),
    }
}

🏆 Nível 4: Desafio Corporativo

Problema 10.4 — Combinadores Funcionais em Option e Result (.map, .and_then, .unwrap_or)

Contexto: Combinadores Funcionais em Option e Result (.map, .and_then, .unwrap_or) no contexto de Enums, Option, Result e Pattern Matching.

Requisitos de Execução:

  1. Compor pipeline de transformação em Option utilizando .map() e .unwrap_or_default().

Resultado Esperado

Transformação funcional de Option sem blocos imperativos match.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_10_4_SeuNome
  2. Envie na tarefa: Atividade Cap 10 - Enums, Option, Result e Pattern Matching
🔑 Gabarito de Código & Solução Comentada
// option_combinators.rs
fn main() {
    let texto: Option<&str> = Some("42");
    let numero = texto
        .and_then(|s| s.parse::<i32>().ok())
        .map(|n| n * 2)
        .unwrap_or(0);
    println!("Numero transformado: {}", numero);
}