🧩 Exercícios: Borrowing, Referências Imutáveis e Mutáveis (&, &mut)
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 06.1 — Referências Imutáveis (&T) e Empréstimo sem Perda de Ownership
Contexto: Referências Imutáveis (&T) e Empréstimo sem Perda de Ownership no contexto de Borrowing, Referências Imutáveis e Mutáveis (&, &mut).
Requisitos de Execução:
- Passar
&Stringpara função de cálculo de tamanho mantendo a posse na função chamadora.
Resultado Esperado
Empréstimo imutável executado com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_06_1_SeuNome - Envie na tarefa:
Atividade Cap 06 - Borrowing, Referências Imutáveis e Mutáveis (&, &mut)
🔑 Gabarito de Código & Solução Comentada
// borrowing_imutavel.rs
fn calcular_tamanho(texto: &String) -> usize {
texto.len()
}
fn main() {
let msg = String::from("Rust Systems");
let tam = calcular_tamanho(&msg);
println!("Mensagem '{}' possui {} caracteres.", msg, tam);
}
🔍 Nível 2: Prática
Problema 06.2 — Referências Mutáveis (&mut T) e Regra de Exclusividade
Contexto: Referências Mutáveis (&mut T) e Regra de Exclusividade no contexto de Borrowing, Referências Imutáveis e Mutáveis (&, &mut).
Requisitos de Execução:
- Modificar conteúdo de uma string através de referência mutável exclusiva
&mut s.
Resultado Esperado
String modificada via referência mutável com garantia de zero data races.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_06_2_SeuNome - Envie na tarefa:
Atividade Cap 06 - Borrowing, Referências Imutáveis e Mutáveis (&, &mut)
🔑 Gabarito de Código & Solução Comentada
// borrowing_mutavel.rs
fn adicionar_sufixo(s: &mut String) {
s.push_str(" -> OK");
}
fn main() {
let mut log = String::from("Status");
adicionar_sufixo(&mut log);
println!("Log atualizado: {}", log);
}
⚡ Nível 3: Integração
Problema 06.3 — Regra de Ouro do Borrow Checker (1 Mutável OU Múltiplas Imutáveis)
Contexto: Regra de Ouro do Borrow Checker (1 Mutável OU Múltiplas Imutáveis) no contexto de Borrowing, Referências Imutáveis e Mutáveis (&, &mut).
Requisitos de Execução:
- Demonstrar que o compilador proíbe referências mutáveis concorrentes com referências imutáveis ativas.
Resultado Esperado
Concorrência de referências validada e garantida pelo Borrow Checker.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_06_3_SeuNome - Envie na tarefa:
Atividade Cap 06 - Borrowing, Referências Imutáveis e Mutáveis (&, &mut)
🔑 Gabarito de Código & Solução Comentada
// borrow_checker.rs
fn main() {
let mut dado = String::from("Dado");
{
let r1 = &dado;
let r2 = &dado;
println!("Refs imutaveis: {} e {}", r1, r2);
} // r1 e r2 saem de escopo
let r3 = &mut dado;
r3.push_str(" Modificado");
println!("Ref mutavel: {}", r3);
}
🏆 Nível 4: Desafio Corporativo
Problema 06.4 — Prevenção de Dangling References em Tempo de Compilação
Contexto: Prevenção de Dangling References em Tempo de Compilação no contexto de Borrowing, Referências Imutáveis e Mutáveis (&, &mut).
Requisitos de Execução:
- Demonstrar como o Rust impede o retorno de referências para variáveis locais que sairiam de escopo.
Resultado Esperado
Dangling pointer prevenido pelo compilador do Rust.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_06_4_SeuNome - Envie na tarefa:
Atividade Cap 06 - Borrowing, Referências Imutáveis e Mutáveis (&, &mut)
🔑 Gabarito de Código & Solução Comentada
// no_dangling.rs
fn criar_string() -> String {
let s = String::from("Seguro");
s // Retorna a posse da String, nao uma referencia para a pilha local!
}
fn main() {
let dados = criar_string();
println!("Dados recebidos com seguranca: {}", dados);
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |