Rullst AcademyRullst Academy/Lição
Rust II: dados, escolhas e confiança · Lição 02 / 12

Emprestar para ler e mudar

Uma função pode consultar ou atualizar uma etiqueta sem ficar com ela. A assinatura mostra qual permissão está sendo pedida.

Trilhas de aprendizado12 min

Vamos descobrir juntos

  1. 1

    Uma referência & permite acessar um valor sem assumir sua posse. Uma função que só lê texto pode receber &str; &name converte o empréstimo de String quando necessário.

  2. 2

    &mut String permite alterar essa String. Tanto a variável original quanto o empréstimo devem permitir mutação. O * não é necessário em text.push_str porque a chamada de método resolve a referência.

  3. 3

    Para o mesmo valor, referências compartilhadas podem coexistir; um empréstimo mutável exige acesso exclusivo enquanto estiver em uso. O cenário 2 tenta manter uma referência de leitura até depois da alteração.

  4. 4

    Em muitos casos o compilador encerra o empréstimo após seu último uso, antes da chave final do bloco. Organizar leitura e escrita em etapas ajuda mais do que adicionar clone sem entender o conflito.

DA LIÇÃO PARA A PRÁTICA

Guia para acompanhar no seu ritmo

Leia os passos antes de usar a referência abaixo. Comandos são executados no terminal do sistema indicado; o cadastro acontece no site oficial. Os exercícios da Rullst Academy são treino e não verificam sua instalação ou conta externa.

fn length(text: &str) -> usize { text.len() }
fn mark(text: &mut String) { text.push_str("!"); }
fn main() {
    let mut name = String::from("Tico");
    println!("{}", length(&name));
    mark(&mut name);
    println!("{}", length(&name));
}

Links oficiais e próximo passo

✦
SUA MISSÃO

Usar &str e &mut String e reconhecer empréstimos incompatíveis.

Agora é a sua vez

Oficina de descobertas

Leia, preveja, investigue

Preveja antes de mostrar. Este painel revela resultados preparados, não compila seu código. Erros de compilação são resumidos; o texto exato pode variar com a versão do compilador.
Mini experimento

Simulação didática: compare os cartões e confira suas previsões. O navegador não está compilando Rust nem iniciando um servidor.

fn length(text: &str) -> usize { text.len() }
fn mark(text: &mut String) { text.push_str("!"); }
fn main() {
    let mut name = String::from("Tico");
    println!("{}", length(&name));
    mark(&mut name);
    println!("{}", length(&name));
}
Monte suas respostas e confira quando estiver pronto.
Uma pausa para entender

Qual contrato permite alterar a String emprestada?

Preciso de uma pista

O &mut comunica acesso mutável exclusivo enquanto o empréstimo está em uso.

Carregando sua jornada…

Leve com você

Mova println!("{view}") para antes de name.push_str no cenário 2. Compile e explique por que a ordem dos usos importa. Crie uma função que acrescente dois sinais e confira o tamanho.

RUST II · .rs

Sua bancada Rust II

Leia, preveja e responda aqui. Para compilar de verdade, extraia o ZIP da atividade em uma pasta nova, abra o terminal ao lado de Cargo.toml e use os comandos abaixo. Rust e as ferramentas do seu sistema precisam estar instalados.

cargo check --offline
cargo test --offline
cargo run --offline
Meus arquivos e GitHub

O editor abaixo salva um rascunho neste navegador e permite baixar ou publicar seu .rs. Para executá-lo no projeto, salve o arquivo editado como src/main.rs. O ZIP contém a versão inicial; os resultados preparados não mudam com suas edições. A avaliação online não comprova execução local.

No seu ritmo

Meus arquivos e GitHub

Toda lição pode virar um registro seu: código, anotações ou um plano de prática. Guardar um arquivo no GitHub é opcional e não altera seu XP.

Manual do aluno

O editor e os downloads abrem quando esta lição estiver liberada para sua conta. Confira o acesso abaixo ou volte ao mapa da trilha.

Conferindo seu acesso à lição…

Rullstpetbot

A IA pode errar. Confira no material da lição.