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

Quem cuida do valor?

Uma etiqueta passa para outra bancada. Em Rust, atribuir uma String pode transferir sua posse; não cria automaticamente outra cópia do texto.

Trilhas de aprendizado12 min

Vamos descobrir juntos

  1. 1

    Esta trilha continua variáveis, condições e funções de Rust I. Revise essa base se precisar; Python não é obrigatório. Prepare Rust/Cargo pela trilha do seu sistema e confira rustc --version e cargo --version.

  2. 2

    String::from cria texto com posse. let second = first move esse valor: second passa a ser o dono e first não pode mais ser usado. Ao sair do escopo, o dono libera o recurso.

  3. 3

    first.clone() cria outra String com conteúdo independente. Isso tem custo: copie quando precisar de outra posse, não apenas para silenciar o compilador. Inteiros como u32 implementam Copy; atribuí-los mantém ambos os nomes utilizáveis.

  4. 4

    No cenário 1, modificar second não muda first. O cenário 2 tenta ler first após movê-lo: o compilador recusa antes de executar. Leia o local do movimento e o local do uso apontados no diagnóstico.

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 main() {
    let first = String::from("Tico");
    let mut second = first.clone();
    second.push_str("!");
    println!("{} {}", first.len(), second.len());
}

Links oficiais e próximo passo

✦
SUA MISSÃO

Distinguir move, Copy e clone; interpretar um uso após movimento.

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 main() {
    let first = String::from("Tico");
    let mut second = first.clone();
    second.push_str("!");
    println!("{} {}", first.len(), second.len());
}
Monte suas respostas e confira quando estiver pronto.
Uma pausa para entender

Quando clone é uma escolha justificada?

Preciso de uma pista

Mover e copiar são operações diferentes; clone duplica o conteúdo de String.

Carregando sua jornada…

Leve com você

Execute o cenário 1 em src/main.rs. Depois troque first.clone() por first e rode cargo check. Explique o erro e restaure a versão válida; registre por que a cópia era necessária neste exemplo.

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.