Aula 08 - Structs e Enums 🏗️
Objetivo
Objetivo: Aprender a definir seus próprios tipos de dados complexos usando Structs e Enums, e entender como o Rust lida com a ausência de valores (null) de forma segura.
1. Structs: Estruturando Dados 🧱
Uma Struct permite agrupar valores relacionados em um único pacote nomeado.
struct Usuario {
ativo: bool,
nome: String,
email: String,
idade: u64,
}
fn main() {
let mut user1 = Usuario {
email: String::from("alguem@exemplo.com"),
nome: String::from("Ricardo"),
ativo: true,
idade: 30,
};
user1.email = String::from("novo@exemplo.com");
}
2. Métodos com impl ⚙️
Podemos definir funções que pertencem a uma Struct usando o bloco impl.
struct Retangulo {
largura: u32,
altura: u32,
}
impl Retangulo {
fn area(&self) -> u32 {
self.largura * self.altura
}
}
3. Enums: Tipos com Variantes 🌈
Enums permitem definir um tipo que pode ser uma de várias variantes.
enum Direcao {
Norte,
Sul,
Leste,
Oeste,
}
enum Mensagem {
Sair,
Mover { x: i32, y: i32 },
Escrever(String),
}
4. O Fim do "Null": Option<T> 🛡️
Rust não possui o valor null. Em seu lugar, usamos o Enum Option.
enum Option<T> {
None,
Some(T),
}
let algum_numero = Some(5);
let nenhum_numero: Option<i32> = None;
5. Visualização: Pattern Matching com Enums 🧩
graph TD
A["Valor Option<i32>"] --> B{Dá match?}
B -->|Some(n)| C["Usa o valor 'n'"]
B -->|None| D["Trata o caso vazio"]
style B fill:#f9f,stroke:#333
6. Mini-Projeto: Sistema de Gerenciamento de Tarefas 📝
Crie um programa que defina:
1. Uma Struct Tarefa com campos como titulo, descricao e status.
2. Um Enum Status com variantes: Pendente, EmAndamento, Concluida.
3. Implemente um método na Struct Tarefa para atualizar o status.
4. Use um Vec<Tarefa> para armazenar várias tarefas e um match para exibir mensagens diferentes dependendo do status de cada uma.
7. Exercício de Fixação 🧠
- Qual a diferença entre uma Struct e uma Tupla?
- Para que serve o parâmetro
&selfem um método? - Por que o uso de
Option<T>é considerado mais seguro que o uso denullem outras linguagens?
Próxima Aula: Vamos aprender a lidar com erros de forma profissional com Tratamento de Erros! ⚠️