Menu
Coddy logo textTech

Visão Geral de Structs

Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 21 de 66.

Agora que você entende o que são structs, vamos aprender como realmente criá-las e usá-las. Isso envolve duas etapas: primeiro definir a estrutura da struct, depois criar instâncias dela.

Para definir uma struct, você usa a palavra-chave struct seguida pelo nome da struct e seus campos dentro de chaves. Cada campo possui um nome e um tipo:

struct User {
    username: String,
    active: bool,
}

Isso cria um modelo para uma struct User com dois campos: username do tipo String e active do tipo bool.


Nomes de structs em Rust seguem PascalCase (também chamado de CamelCase) — cada palavra começa com uma letra maiúscula, sem sublinhados. Por exemplo: User, BlogPost, GamePlayer.

Depois de definir uma struct, você pode criar instâncias dela especificando valores para cada campo:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

Observe que você fornece o nome da struct seguido por chaves contendo cada nome de campo, dois pontos e seu valor. A ordem dos campos não precisa coincidir com a ordem de definição.

Para acessar o valor de um campo de uma instância de struct, use a notação de ponto — o nome da instância seguido por um ponto e o nome do campo:

println!("{}", user1.username); // alice
println!("{}", user1.active);   // true

Você também pode atualizar o valor de um campo usando a notação de ponto, desde que a instância seja declarada com let mut:

let mut user1 = User {
    username: String::from("alice"),
    active: true,
};
user1.active = false;
challenge icon

Desafio

Fácil

Você receberá três entradas: um nome de produto, um preço (como um número decimal) e uma quantidade em estoque (como um número inteiro). Defina uma struct Product com três campos: name do tipo String, price do tipo f64 e stock do tipo i32. Em seguida, crie uma instância desta struct usando os valores de entrada e imprima as informações do produto.

Requisitos:

  • Defina uma struct Product com os campos: name: String, price: f64 e stock: i32
  • Leia a primeira entrada como o nome do produto
  • Leia a segunda entrada e converta-a para f64 para o preço
  • Leia a terceira entrada e converta-a para i32 para a quantidade em estoque
  • Crie uma instância da struct Product com esses valores
  • Imprima as informações do produto no formato exato mostrado abaixo

Entrada:

  • Primeira linha: Nome do produto (ex: Laptop)
  • Segunda linha: Preço como um número decimal (ex: 999.99)
  • Terceira linha: Quantidade em estoque como um número inteiro (ex: 15)

Saída:

  • Primeira linha: Product: [name]
  • Segunda linha: Price: $[price]
  • Terceira linha: Stock: [quantity]

Folha de consulta

Nomes de structs usam PascalCase (ex: UserAccount). Para definir uma struct, use a palavra-chave struct seguida pelo nome da struct e seus campos dentro de chaves:

struct User {
    username: String,
    active: bool,
}

Cada campo possui um nome e um tipo.

Para criar uma instância de uma struct, especifique valores para cada campo:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

A ordem dos campos na instância não precisa coincidir com a ordem de definição.

Para acessar um campo, use a notação de ponto — o nome da instância seguido por um ponto e o nome do campo:

println!("{}", user1.username); // imprime: alice
println!("{}", user1.active);   // imprime: true

Experimente você mesmo

use std::io;

// TODO: Defina sua struct Product aqui


fn main() {
    // Ler o nome do produto
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // Ler o preço
    let mut price_input = String::new();
    io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");
    
    // Ler a quantidade em estoque
    let mut stock_input = String::new();
    io::stdin().read_line(&mut stock_input).expect("Failed to read line");
    let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
    
    // TODO: Criar uma instância da struct Product usando os valores de entrada
    
    
    // TODO: Imprimir as informações do produto no formato exigido
    
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow