Rullst AcademyRullst Academy/Lição
Rust: da ideia ao programa · Lição 06 / 08

Emprestar sem perder o texto

Você quer mostrar o nome do robô em duas mensagens. Para isso, uma função pode consultar o texto sem tomar posse dele.

Trilhas de aprendizado11 min

Vamos descobrir juntos

  1. 1

    String é um tipo que possui um texto que pode ser construído durante a execução. let name = String::from("Robo"); cria esse valor e dá sua posse a name.

  2. 2

    Passar name para uma função que recebe String move o valor para ela. Sem receber o valor de volta, não podemos continuar usando o vínculo antigo. O compilador confere essa regra.

  3. 3

    Uma função que recebe &str só precisa consultar texto. Chamar show(&name) faz um empréstimo: Rust permite usar essa referência à String onde se espera &str. A função não toma posse de name.

  4. 4

    name.clone() cria outra String com seu próprio texto. Isso é diferente de emprestar. Inteiros como u32 são Copy: copiá-los não segue a mesma regra de movimento de String.

✦
SUA MISSÃO

Escolha um empréstimo de texto e reconheça a diferença entre mover, emprestar e copiar explicitamente.

Agora é a sua vez

Oficina de descobertas

Duas mensagens, um nome

Temos let name = String::from("Robo"); e fn show(name: &str). Queremos chamar show e depois usar name novamente.
Seu trecho em construção
let name = String::from("Robo");
show({1});
println!("{name}");
Monte suas respostas e confira quando estiver pronto.
Uma pausa para entender

Se a função só precisa ler o nome, qual interface expressa essa intenção?

Preciso de uma pista

Uma referência permite consultar sem tomar posse do texto.

Carregando sua jornada…

Leve com você

Explique com suas palavras por que emprestar um texto é suficiente para imprimi-lo. No projeto final, procure a função que recebe &str e encontre quem continua sendo dono da String.

Quero ver o Rust por trás

Esta parte é opcional. Não precisa decorar o código para continuar.

fn show(name: &str) {
    println!("{name}");
}

fn main() {
    let name = String::from("Robo");
    show(&name);
    println!("{name}");
}
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.