Capítulo 10: Estruturas (Structs) 🤖🌆
Neste capítulo, vamos aprender a criar nossos próprios tipos de dados compostos usando as Structs no Rust, com o tema Cyberpunk 2077!
📖 O que são Structs?
Uma struct (estrutura) permite agrupar variáveis de tipos diferentes sob um único nome. No Rust, não temos classes! Usamos structs combinadas com blocos impl para adicionar comportamentos (métodos).
📖 Exemplo Guiado: Registro de Mercenário
Vamos criar uma estrutura para representar um Mercenário de Night City.
- Crie o arquivo
mercenario.rsna pastasrc/:
// Definindo a estrutura
struct Mercenario {
apelido: String,
nivel: i32,
cibernetica: f32, // Porcentagem de implantes
}
// Bloco de implementação para adicionar métodos
impl Mercenario {
fn exibir_status(&self) { // '&self' serve para acessar os dados da própria struct
println!("--- Registro de Night City ---");
println!("Apelido: {}", self.apelido);
println!("Nivel: {}", self.nivel);
println!("Implantes: {}%", self.cibernetica);
}
}
fn main() {
// Criando uma instância da struct
let v = Mercenario {
apelido: String::from("V"),
nivel: 50,
cibernetica: 75.5,
};
// Chamando o método
v.exibir_status();
}🕹️ Como Executar e Testar no VS Code
- Abra o terminal integrado.
- Compile:
rustc mercenario.rs - Execute:
./mercenario
Resultado Esperado:
--- Registro de Night City ---
Apelido: V
Nivel: 50
Implantes: 75.5%📊 Ilustração Visual: Estrutura e Métodos
Veja como os dados e funções ficam agrupados:
classDiagram class Mercenario { +String apelido +i32 nivel +f32 cibernetica +exibir_status() }
🛠️ Prática Obrigatória 1: Cadastro de Ciborgue
Crie um programa chamado cadastro_ciborgue.rs com uma struct Ciborgue que tenha os campos modelo (String), bateria (i32) e ativo (bool). Crie um método exibir() no bloco impl para mostrar os dados formatados.
🔑 Gabarito de Código
Prática 1: cadastro_ciborgue.rs
struct Ciborgue {
modelo: String,
bateria: i32,
ativo: bool,
}
impl Ciborgue {
fn exibir(&self) {
println!("\n--- Ciborgue Cadastrado ---");
println!("Modelo: {}", self.modelo);
println!("Bateria: {}%", self.bateria);
println!("Status: {}", if self.ativo { "Ativo" } else { "Inativo" });
}
}
fn main() {
let c = Ciborgue {
modelo: String::from("T-800"),
bateria: 100,
ativo: true,
};
c.exibir();
}