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

Propagar sem esconder

Um registro une nome e quantidade. Cada etapa pode falhar; ? permite interromper o caminho com o erro correto.

Trilhas de aprendizado12 min

Vamos descobrir juntos

  1. 1

    Nosso formato didático é nome;quantidade, como sensor;3. split_once encontra o primeiro separador. Seu Option vira Result por ok_or("format"): separador ausente é um erro de formato.

  2. 2

    quantity(raw)? continua com o número se receber Ok. Se receber Err, retorna esse erro da função atual imediatamente. Não corrige o texto nem repete a chamada.

  3. 3

    Aqui as funções retornam o mesmo tipo de erro, &'static str. ? também pode converter erros compatíveis em outros programas; a função que o usa precisa ter um retorno compatível.

  4. 4

    Este formato não é um leitor CSV geral: não há aspas, escape nem separadores dentro do nome. Documentar limites evita prometer mais do que o parser faz. No projeto, todos os registros serão validados antes de usar a coleção.

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 parse_line(line: &str) -> Result<u16, &'static str> {
    let (name, raw) = line.split_once(';').ok_or("format")?;
    if name.trim().is_empty() { return Err("name"); }
    let amount = quantity(raw)?;
    Ok(amount)
}
fn main() { println!("{:?}", parse_line("sensor;3")); }

Links oficiais e próximo passo

✦
SUA MISSÃO

Ler registros simples e explicar como ? propaga erros.

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 parse_line(line: &str) -> Result<u16, &'static str> {
    let (name, raw) = line.split_once(';').ok_or("format")?;
    if name.trim().is_empty() { return Err("name"); }
    let amount = quantity(raw)?;
    Ok(amount)
}
fn main() { println!("{:?}", parse_line("sensor;3")); }
Monte suas respostas e confira quando estiver pronto.
Uma pausa para entender

O que acontece quando quantity retorna Err?

Preciso de uma pista

Observe o retorno antecipado, não apenas a linha final Ok.

Carregando sua jornada…

Leve com você

Acrescente testes para sensor, ;3 e sensor;21. Desenhe as etapas e marque em qual delas cada entrada para. Decida o que aconteceria com uma linha extra no arquivo antes de mudar o parser.

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.