Lições do módulo (1/2)
Definindo e instanciando estruturas
Estruturas (ou estruturas) em Rust são tipos de dados personalizados que permitem agrupar vários valores relacionados. Eles são semelhantes a objetos ou classes de outras linguagens, mas sem herança.
Definindo uma estrutura
Para definir uma estrutura, usamos a palavra-chave struct seguida do nome em PascalCase. Dentro, definimos os nomes e tipos dos campos:
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}Criando uma instância
Para usar uma struct, devemos criar uma instância preenchendo todos os campos especificados:
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
// Access fields using dot notation
println!("Is user {} active? {}", user1.username, user1.active);
}Mutabilidade estrutural
No Rust, toda a instância deve ser marcada como mutável (mut) se você quiser modificar algum de seus campos. Rust não permite marcar apenas alguns campos como mutáveis:
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
user1.active = false; // Valid because user1 is mutable!
}Estruturas de tupla e estruturas semelhantes a unidades
Rust também oferece suporte a dois outros formatos de estrutura além das estruturas clássicas de campo nomeado:
- Estruturas de Tupla: Possuem um nome associado mas os campos não possuem nomes individuais, apenas tipos. Eles são úteis para definir e diferenciar tipos específicos:
Rust
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - Estruturas semelhantes a unidades: Elas não definem nenhum campo. Eles se comportam como o tipo de unidade
(). Eles são úteis quando você precisa implementar comportamentos (traços) em um tipo sem armazenar nenhum dado nele.
Experimente você mesmo
Defina a estrutura User acima de main com os campos: nome de usuário (tipo String) e ativo (tipo bool).
Mostrar dica
Escreva `struct User { nome de usuário: String, ativo: bool }`before`main`.
Solução disponível após 3 tentativas
Modifique user1 para torná-lo mutável (deixe mut user1) e altere o campo ativo para false antes de imprimir.
Mostrar dica
Adicione `mut`to`let user1`para torná-lo`let mut user1`e insira`user1.active = false;`.
Solução disponível após 3 tentativas
Defina uma estrutura de tupla chamada Color contendo três campos i32. Principalmente, instancie Color com os valores 255, 0 e 100 atribuindo-o à variável my_color, depois imprima seu primeiro elemento (valor vermelho) usando println!.
Mostrar dica
Defina a estrutura da tupla com `struct Color(i32, i32, i32);`. Basicamente, instancie-o como `let my_color = Color(255, 0, 100);`e imprima o valor vermelho com`my_color.0`.
Solução disponível após 3 tentativas