No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 17: Estruturas de Dados (Blueprints do Mecha)
1. Narrativa
Cada componente do mecha Æther tem propriedades específicas — blindagem, potência, status. Estruturas de Dados são os blueprints que definem a forma de cada componente. O piloto aprende a criar structs e enums para modelar as partes do mecha com precisão.
2. Conceito
Rust oferece duas formas principais de estruturar dados:
struct: Agrupa campos nomeados (como um formulário)enum: Define variantes exclusivas (como estados possíveis) — usada aqui como apoio paraStatus; enums serão exploradas em detalhes na Lição 18struct tuple: Struct sem nomes de camposstruct unit: Struct sem campos (marcador)
3. Requisitos
- Definir structs com campos nomeados
- Criar enums com variantes
- Implementar funções que criam e manipulam estruturas
4. Design de Dados
graph LR
A[Estruturas] --> B[Struct]
A --> C[Enum]
B --> D[Campos nomeados]
B --> E[Tuple struct]
C --> F[Variantes simples]
C --> G[Variantes com dados]
5. Diagrama de Fluxo
flowchart TD
A[Modelar componente] --> B{Múltiplos campos?}
B -->|Sim| C[struct com campos]
B -->|Estados mutuamente exclusivos| D[enum]
C --> E[Definir campos e tipos]
D --> F[Listar variantes]
E --> G[Criar funções construtoras]
F --> G
6. Funções
| Função | Descrição |
|---|---|
criar_sensor |
Cria uma struct Sensor com valores iniciais |
criar_motor |
Cria uma struct Motor com potência |
status_do_componente |
Retorna descrição do status (enum) |
comparar_sensores |
Compara dois sensores pela precisão |
criar_coordenada |
Cria uma tuple struct (x, y) |
precisao_media |
Calcula média de precisão de sensores |
contar_ativos |
Conta componentes com status ativo |
resumo_componentes |
Retorna resumo textual dos componentes |
7. Exemplo
struct Sensor {
nome: String,
precisao: f64,
ativo: bool,
}
let sensor = Sensor {
nome: String::from("radar"),
precisao: 0.95,
ativo: true,
};
8. Missão
- Usar a struct
Sensorfornecida emsrc/lib.rs(campos:nome,precisao,ativo) — o tipo já está declarado - Usar a struct
Motorfornecida emsrc/lib.rs(campos:nome,potencia,ativo) — o tipo já está declarado - Usar o enum
Statusfornecido emsrc/lib.rs(variantes:Ativo,Inativo,Manutencao) — o tipo já está declarado; enums serão exploradas em detalhes na Lição 18 - Implementar
criar_sensorpara construir um Sensor - Implementar
criar_motorpara construir um Motor - Implementar
status_do_componenteconvertendo Status em texto - Implementar funções de análise sobre as estruturas
- Implementar
criar_coordenadausando a tuple structCoordenadafornecida
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
- Structs agrupam dados relacionados — prefira campos nomeados para clareza
- Enums representam escolhas exclusivas — apenas uma variante por vez
#[derive(Debug)]permite imprimir structs com{:?}- Tuple structs são úteis quando o nome do campo não adiciona informação