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

Uma estrutura com responsabilidade

Na oficina, um equipamento tem nome e quantidade disponível. Uma struct mantém os dados relacionados juntos.

Trilhas de aprendizado12 min

Vamos descobrir juntos

  1. 1

    struct Item define campos nomeados e seus tipos. Neste primeiro modelo guardamos apenas a quantidade: Item { available: 3 } cria uma instância. Duas instâncias podem ter valores diferentes; o projeto final acrescentará nome e total.

  2. 2

    impl Item reúne funções associadas ao tipo. Um método com &self consulta; com &mut self pode atualizar. Chamar item.available() empresta o item para o método.

  3. 3

    take_one verifica se há uma unidade antes de subtrair. Quando está vazio, retorna false e mantém o estado. A regra impede subtrair de zero neste caminho.

  4. 4

    O campo available e o método available() têm o mesmo nome, mas parênteses distinguem a chamada. A API final usará campos privados em um módulo para concentrar as regras de alteraçã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.

struct Item { available: u16 }
impl Item {
    fn available(&self) -> u16 { self.available }
    fn take_one(&mut self) -> bool {
        if self.available == 0 { return false; }
        self.available -= 1;
        true
    }
}
fn main() {
    let mut item = Item { available: 3 };
    item.take_one();
    println!("{}", item.available());
}

Links oficiais e próximo passo

✦
SUA MISSÃO

Criar structs, implementar métodos e distinguir &self de &mut self.

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.

struct Item { available: u16 }
impl Item {
    fn available(&self) -> u16 { self.available }
    fn take_one(&mut self) -> bool {
        if self.available == 0 { return false; }
        self.available -= 1;
        true
    }
}
fn main() {
    let mut item = Item { available: 3 };
    item.take_one();
    println!("{}", item.available());
}
Monte suas respostas e confira quando estiver pronto.
Uma pausa para entender

Por que verificar antes de subtrair?

Preciso de uma pista

A verificação protege uma regra específica; não prova o programa inteiro.

Carregando sua jornada…

Leve com você

Acrescente uma segunda chamada a take_one no cenário 2 e imprima o bool retornado. Explique qual dado o método lê e qual altera; crie outra instância sem mudar a primeira.

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.