No description
Find a file
2026-08-14 07:19:16 +02:00
.woodpecker chore: migrate CI to .woodpecker/{push,branch}.yml 2026-08-14 07:19:16 +02:00
src initial content 2026-08-14 07:19:13 +02:00
tests initial content 2026-08-14 07:19:13 +02:00
.gitignore Initial commit 2026-08-14 05:18:54 +00:00
Cargo.lock initial content 2026-08-14 07:19:13 +02:00
Cargo.toml chore: declare MSRV 1.85 (edition 2024) 2026-08-14 07:19:16 +02:00
LICENSE chore: add AGPL-3.0 license and standard .gitignore 2026-08-14 07:19:16 +02:00
README.md fix: content audit corrections (accuracy, coherence, concordância, tests) 2026-08-14 07:19:16 +02:00

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 para Status; enums serão exploradas em detalhes na Lição 18
  • struct tuple: Struct sem nomes de campos
  • struct 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

  1. Usar a struct Sensor fornecida em src/lib.rs (campos: nome, precisao, ativo) — o tipo já está declarado
  2. Usar a struct Motor fornecida em src/lib.rs (campos: nome, potencia, ativo) — o tipo já está declarado
  3. Usar o enum Status fornecido em src/lib.rs (variantes: Ativo, Inativo, Manutencao) — o tipo já está declarado; enums serão exploradas em detalhes na Lição 18
  4. Implementar criar_sensor para construir um Sensor
  5. Implementar criar_motor para construir um Motor
  6. Implementar status_do_componente convertendo Status em texto
  7. Implementar funções de análise sobre as estruturas
  8. Implementar criar_coordenada usando a tuple struct Coordenada fornecida

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