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

Escolhas que carregam dados

Retirar e devolver são ações diferentes, mas ambas precisam de uma quantidade. Um enum expressa essas alternativas.

Trilhas de aprendizado10 min

Vamos descobrir juntos

  1. 1

    enum Action { Take(u16), Return(u16) } define duas variantes. Cada uma carrega uma quantidade. Action::Take(2) não é apenas o número 2: também registra a intenção de retirar.

  2. 2

    match action escolhe o braço correspondente. Em Action::Take(n), n recebe a quantidade dessa variante. O resultado da expressão pode alimentar let available.

  3. 3

    O match precisa cobrir todas as possibilidades. Ao adicionar outra variante, os matches sem um braço genérico precisarão ser revisados. Isso ajuda a encontrar decisões esquecidas.

  4. 4

    Estes dois exemplos usam quantidades previamente válidas. Um enum não garante sozinho que há estoque ou que uma devolução é legítima. O projeto final aplicará essas regras com Result antes de mudar o estado.

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.

enum Action { Take(u16), Return(u16) }
fn change(stock: u16, action: Action) -> u16 {
    match action { Action::Take(n) => stock - n, Action::Return(n) => stock + n }
}
fn main() { println!("{}", change(5, Action::Take(2))); }

Links oficiais e próximo passo

✦
SUA MISSÃO

Representar alternativas com enum e tratar todas com match.

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.

enum Action { Take(u16), Return(u16) }
fn change(stock: u16, action: Action) -> u16 {
    match action { Action::Take(n) => stock - n, Action::Return(n) => stock + n }
}
fn main() { println!("{}", change(5, Action::Take(2))); }
Monte suas respostas e confira quando estiver pronto.
Uma pausa para entender

O que um match exaustivo garante aqui?

Preciso de uma pista

Cobrir variantes e validar quantidades são responsabilidades diferentes.

Carregando sua jornada…

Leve com você

Adicione uma variante Inspect sem quantidade. Antes de compilar, preveja o diagnóstico; depois acrescente um braço que conserve o estoque.

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.