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

Erros que podem ser tratados

Uma entrada pode ser texto, zero ou uma quantidade maior do que permitimos. Result permite responder a essas situações sem fingir que tudo deu certo.

Trilhas de aprendizado12 min

Vamos descobrir juntos

  1. 1

    Result<T, E> tem duas variantes: Ok com o resultado e Err com o erro. Aqui T é u16 e E é uma mensagem fixa &'static str. Esse texto está no programa e vive durante toda a execução.

  2. 2

    trim remove espaços nas pontas. parse::<u16>() tenta converter para um inteiro sem sinal de 16 bits. Texto, negativos e números fora do tipo podem falhar antes da regra de negócio.

  3. 3

    map_err(|_| "number") troca o erro de conversão por uma mensagem curta. A pequena função entre barras ignora o erro original. O ? devolve esse Err ao chamador; na próxima lição acompanharemos essa passagem.

  4. 4

    Mesmo um u16 válido pode ser inválido para nossa oficina: aceitamos somente 1 até 20, inclusive. Evite unwrap em entrada que pode falhar; escolha uma resposta para Ok e outra para Err.

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 quantity(text: &str) -> Result<u16, &'static str> {
    let n = text.trim().parse::<u16>().map_err(|_| "number")?;
    if !(1..=20).contains(&n) { return Err("range"); }
    Ok(n)
}
fn main() { println!("{:?}", quantity("3")); }

Links oficiais e próximo passo

✦
SUA MISSÃO

Separar conversão de validação e retornar Ok ou Err.

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 quantity(text: &str) -> Result<u16, &'static str> {
    let n = text.trim().parse::<u16>().map_err(|_| "number")?;
    if !(1..=20).contains(&n) { return Err("range"); }
    Ok(n)
}
fn main() { println!("{:?}", quantity("3")); }
Monte suas respostas e confira quando estiver pronto.
Uma pausa para entender

Converter com sucesso torna a entrada válida para qualquer regra?

Preciso de uma pista

Zero cabe em u16, mas a oficina exige uma quantidade positiva.

Carregando sua jornada…

Leve com você

Teste 1, 20, 21, -1, vazio e " 3 ". Agrupe as saídas em sucesso, erro de número e erro de intervalo. Explique por que validar não é apenas converter.

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.