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

Projeto: central de pontos

Vamos unir valores, decisões, laços, funções, empréstimos e Option em um programa que você poderá baixar e executar.

Trilhas de aprendizado14 min

Vamos descobrir juntos

  1. 1

    Contrato do projeto: cada acerto vale 10 pontos. Rodadas com três ou mais acertos recebem mais 5 pontos. Os exemplos usam entre zero e cinco acertos.

  2. 2

    Separe responsabilidades: bonus decide se há um extra com Option; score calcula a pontuação; report recebe o nome por &str e monta uma mensagem com format!.

  3. 3

    format! usa espaços como {} para inserir valores e devolve uma String. Ao contrário de println!, não imprime por conta própria. main decide o que mostrar e percorre rodadas com for.

  4. 4

    Antes de executar, preveja casos sem acertos, abaixo do bônus e no limite do bônus. O ZIP inclui testes automatizados, comentários no idioma escolhido e instruções para cargo run e cargo test.

  5. 5

    Este projeto usa Rust e sua biblioteca padrão, sem Rullst. A primeira trilha da Rullst Academy exporta um aplicativo web com Rullst 12. A linguagem é a base comum; o framework acrescenta ferramentas para a aplicação web.

✦
SUA MISSÃO

Monte a regra de pontuação e confira três cenários antes de baixar o projeto Rust.

Agora é a sua vez

Oficina de descobertas

Monte e confira sua regra

Cada acerto vale 10. A partir de 3 acertos, acrescente 5. Monte as três constantes e faça as previsões. Esta montagem é uma atividade guiada; o ZIP contém o programa Rust executável.
Seu trecho em construção
fn score(correct: u32) -> u32 {
    let base = correct * {1};
    if correct >= {3} { base + {2} } else { base }
}
// score(0): {4}?  score(2): {5}?  score(3): {6}?
Monte suas respostas e confira quando estiver pronto.
Uma pausa para entender

O que verifica melhor a regra antes de ampliarmos o programa?

Preciso de uma pista

Uma regra pode acertar um exemplo e falhar justamente na fronteira.

Carregando sua jornada…

Como perceber o que aprendi?

Use os objetivos e o desafio abaixo como uma conversa com você mesmo ou com alguém que possa ajudar. É uma autoavaliação orientada: não envia respostas, não concede XP e não verifica automaticamente sua autonomia.

Em Fundamentos, altere um exemplo, preveja o resultado, confira um caso comum e um caso de erro, e explique suas escolhas. Se precisar de ajuda, identifique o trecho que quer praticar novamente.

Seu desafio de transferência

No projeto baixado, experimente mudar pontos por acerto ou limite do bônus. Atualize primeiro os resultados esperados nos testes; depois ajuste a regra e confira cargo test.

Guarde uma evidência: previsão, tentativa, resultado, uma mudança sua e o que ainda não consegue explicar. Quando possível, peça feedback a alguém; se estudar sozinho, retome depois sem copiar e compare suas tentativas.

Tente de novo em outro momento

Depois de uma pausa, explique a ideia sem abrir a solução e tente um exemplo diferente. Compare com sua primeira tentativa: o que consegue fazer sozinho e onde precisa de uma pista? Você pode escrever, falar ou desenhar; escolha uma forma que permita conferir a mesma ideia. Registre ajuda recebida, inclusive de IA, e volte ao trecho necessário. Não há prazo universal nem XP extra por esse registro.

Conclusões e XP registram as avaliações da Rullst Academy. Uma trilha introdutória pode ajudar na vida cotidiana e preparar próximos estudos; sozinha não comprova domínio completo ou preparo profissional. O nível indica profundidade, não idade.

Leve com você

No projeto baixado, experimente mudar pontos por acerto ou limite do bônus. Atualize primeiro os resultados esperados nos testes; depois ajuste a regra e confira cargo test.

Quero ver o Rust por trás

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

fn bonus(correct: u32) -> Option<u32> {
    if correct >= 3 { Some(5) } else { None }
}

fn score(correct: u32) -> u32 {
    let base = correct * 10;
    match bonus(correct) {
        Some(extra) => base + extra,
        None => base,
    }
}

fn report(name: &str, correct: u32) -> String {
    format!("{name}: {}", score(correct))
}

fn main() {
    let name = String::from("Robo");
    for correct in 0..=5 {
        println!("{}", report(&name, correct));
    }
}
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.