🧩 Exercícios: O Sistema de Ownership (Propriedade) e Move Semantics
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 05.1 — Transferência de Posse (Move) em Tipos alocados no Heap (String)
Contexto: Transferência de Posse (Move) em Tipos alocados no Heap (String) no contexto de O Sistema de Ownership (Propriedade) e Move Semantics.
Requisitos de Execução:
- Demonstrar que atribuir
s2 = s1invalidas1no compilador do Rust.
Resultado Esperado
Semântica de Move verificada: Tentativa de uso pós-move prevenida em tempo de compilação.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_1_SeuNome - Envie na tarefa:
Atividade Cap 05 - O Sistema de Ownership (Propriedade) e Move Semantics
🔑 Gabarito de Código & Solução Comentada
// ownership_move.rs
fn main() {
let s1 = String::from("Recurso Exclusivo");
let s2 = s1; // Move de ownership
// println!("{}", s1); // Erro de compilacao: value borrowed after move
println!("Dono atual da string: {}", s2);
}
🔍 Nível 2: Prática
Problema 05.2 — Tipos com a Trait Copy (Alocação no Stack)
Contexto: Tipos com a Trait Copy (Alocação no Stack) no contexto de O Sistema de Ownership (Propriedade) e Move Semantics.
Requisitos de Execução:
- Demonstrar que tipos escalares primitivos (
i32,f64,bool) implementamCopye não sofrem move.
Resultado Esperado
Tipos escalares duplicados por valor na pilha.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_2_SeuNome - Envie na tarefa:
Atividade Cap 05 - O Sistema de Ownership (Propriedade) e Move Semantics
🔑 Gabarito de Código & Solução Comentada
// copy_trait.rs
fn main() {
let x = 42;
let y = x; // Copia de valor no stack
println!("x: {} | y: {} (Ambos validos)", x, y);
}
⚡ Nível 3: Integração
Problema 05.3 — Passagem e Devolução de Ownership em Funções
Contexto: Passagem e Devolução de Ownership em Funções no contexto de O Sistema de Ownership (Propriedade) e Move Semantics.
Requisitos de Execução:
- Passar
Stringpara uma função que retorne a string modificada devolvendo o ownership.
Resultado Esperado
Posse de dados transferida para função e devolvida com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_3_SeuNome - Envie na tarefa:
Atividade Cap 05 - O Sistema de Ownership (Propriedade) e Move Semantics
🔑 Gabarito de Código & Solução Comentada
// ownership_funcoes.rs
fn processar_string(mut s: String) -> String {
s.push_str(" [PROCESSADO]");
s
}
fn main() {
let texto = String::from("Lote 4");
let resultado = processar_string(texto);
println!("{}", resultado);
}
🏆 Nível 4: Desafio Corporativo
Problema 05.4 — Clonagem Explícita com .clone() e Análise de Custo de Heap
Contexto: Clonagem Explícita com .clone() e Análise de Custo de Heap no contexto de O Sistema de Ownership (Propriedade) e Move Semantics.
Requisitos de Execução:
- Criar cópia profunda no heap utilizando
.clone()de forma consciente para dados que não implementam Copy.
Resultado Esperado
Clonagem profunda executada com alocação explícita.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_4_SeuNome - Envie na tarefa:
Atividade Cap 05 - O Sistema de Ownership (Propriedade) e Move Semantics
🔑 Gabarito de Código & Solução Comentada
// clone_explicit.rs
fn main() {
let original = String::from("Configuracao Base");
let copia = original.clone();
println!("Original: {} | Clone: {}", original, copia);
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |