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); // trueVocê 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;Desafio
FácilVocê 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
Productcom os campos:name: String,price: f64estock: i32 - Leia a primeira entrada como o nome do produto
- Leia a segunda entrada e converta-a para
f64para o preço - Leia a terceira entrada e converta-a para
i32para a quantidade em estoque - Crie uma instância da struct
Productcom 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: trueExperimente 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
}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
1Fluxo de Controle Avançado
A Expressão 'match'Correspondência de Múltiplos ValoresCorrespondência de IntervalosA Expressão 'if let'Loops como ExpressõesRecapitulação - Parser de Comandos Simples4Agrupando Dados com Structs
O que é uma Struct?Visão Geral de StructsAcessando Campos de uma StructStructs MutáveisStructs como Parâmetros de FunçãoTuple StructsRecapitulação - Criando uma Struct Book2Introdução a Vetores
O que é um Vetor?Criando um VetorAdicionando Elementos com pushAcessando Elementos do VetorIterando sobre um VetorIteração MutávelRemovendo ElementosRecapitulação - Rastreador de Pontuação Básico5Pares Chave-Valor com Hash Maps
O que é um Hash Map?Criando um Hash MapInserindo Pares Chave-ValorAcessando ValoresIterando sobre um Hash MapAtualizando um ValorRemovendo um ParRecapitulação - Contador de Palavras8Projeto: Inventário Simples de Itens
Configuração do ProjetoAdicionando um ItemVerificando o EstoqueVendendo um ItemJuntando tudo3Lista de Tarefas via Linha de Comando
Configuração do ProjetoAdicionando uma TarefaVisualizando Todas as TarefasRemovendo uma TarefaCódigo Final