📊 Capítulo 09: Structs & Métodos
Especialização em Sistemas com Rust
🗺️ Encapsulamento e Blocos impl no Rust
flowchart TD
DEF["Definição de Dados: struct ContaBancaria { titular: String, saldo: f64 }"]
--> IMPL["Bloco de Implementação: impl ContaBancaria"]
IMPL --> ASSOC["Função Associada (Construtor): fn new(titular) -> Self"]
IMPL --> METHOD_REF["Método de Leitura: fn saldo(&self) -> f64"]
IMPL --> METHOD_MUT["Método de Modificação: fn depositar(&mut self, valor)"]
IMPL --> METHOD_OWN["Método Consumidor: fn encerrar(self) -> ExtratoFinal"]
style DEF fill:#ede7f6,stroke:#512da8,stroke-width:2px
style IMPL fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style ASSOC fill:#e8f5e9,stroke:#4caf50,stroke-width:1.5px
style METHOD_REF fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style METHOD_MUT fill:#c8e6c9,stroke:#2e7d32,stroke-width:1.5px
style METHOD_OWN fill:#ffebee,stroke:#d32f2f,stroke-width:1.5px
🎯 Slide 1: Tipos de Structs em Rust
-
Structs Clássicas Nomeadas: Agrupam campos nomeados (
struct Ponto { x: f64, y: f64 }). -
Tuple Structs: Úteis para criar tipos fortes (Newtype Pattern):
struct Metros(f64); struct Segundos(f64);. - Unit Structs: Sem campos (
struct Marcador;), úteis para traits de marcação em tempo de compilação.
🎯 Slide 2: Métodos Associados e Parâmetros self
struct Retangulo {
largura: u32,
altura: u32,
}
impl Retangulo {
// Construtor idiomático
pub fn new(largura: u32, altura: u32) -> Self {
Self { largura, altura }
}
pub fn area(&self) -> u32 {
self.largura * self.altura
}
}
🎯 Slide 3: O Padrão Newtype & Type Safety
- Ao encapsular um
i64emstruct UsuarioId(i64), o compilador impede que você passe umProdutoIdpor engano em uma função que esperaUsuarioId, eliminando bugs lógicos graves!
🔗 Navegação do Capítulo 09
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim