No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 24: Pacotes de Dados (Tuplas Avançadas)
1. Narrativa
No cockpit do mecha Æther, múltiplos sensores transmitem dados simultaneamente — temperatura, pressão, velocidade, coordenadas — tudo empacotado em uma única transmissão. Tuplas são os pacotes de dados do Rust: agrupam valores de tipos diferentes em uma unidade compacta e eficiente.
2. Conceito
Tuplas agrupam valores de tipos diferentes em uma estrutura fixa:
- Criação:
(valor1, valor2, valor3)— tipos implícitos - Acesso:
.0,.1,.2— indexação por posição - Desestruturação:
let (a, b, c) = tupla— extrair em variáveis - Aninhamento:
((x, y), (vx, vy))— tuplas dentro de tuplas - Tuple structs:
struct Coordenada(f64, f64, f64)— tuplas nomeadas
3. Requisitos
- Criar e acessar tuplas por índice (
.0,.1,.2) - Desestruturar tuplas em variáveis nomeadas
- Retornar múltiplos valores usando tuplas
- Trabalhar com tuplas aninhadas e tuple structs
4. Design de Dados
graph LR
A[Tupla f64 f64 f64] --> B[.0 → Temperatura]
A --> C[.1 → Pressão]
A --> D[.2 → Velocidade]
E[Tupla Aninhada] --> F[posição: x y z]
E --> G[velocidade: vx vy vz]
H[Tuple Struct] --> I[Coordenada x y z]
5. Diagrama de Fluxo
flowchart TD
A[Início] --> B[Criar pacote de sensores]
B --> C[Acessar por índice .0 .1 .2]
C --> D[Desestruturar em variáveis]
D --> E{Tipo de operação?}
E -->|Conversão| F[Polar → Cartesiano]
E -->|Análise| G[Extrair altitude]
E -->|Combinação| H[Combinar leituras 2D]
F --> I[Retornar resultado]
G --> I
H --> I
6. Funções
| Função | Descrição |
|---|---|
criar_pacote_sensores |
Cria tupla (temperatura, pressão, velocidade) |
obter_temperatura |
Acessa .0 da tupla |
obter_pressao |
Acessa .1 da tupla |
obter_velocidade |
Acessa .2 da tupla |
desestruturar_pacote |
Extrai valores em variáveis nomeadas |
extrair_temp_pressao |
Extrai apenas os dois primeiros valores |
inverter_coordenada |
Troca (x, y) para (y, x) |
ler_sensor |
Retorna (nome, valor, status) por código |
dividir_energia |
Divide energia em duas partes |
polar_para_cartesiano |
Converte (raio, ângulo) para (x, y) |
criar_relatorio_movimento |
Cria tupla aninhada posição + velocidade |
obter_altitude |
Extrai eixo Z de tupla aninhada |
obter_velocidade_vetorial |
Extrai velocidade completa |
combinar_leituras_2d |
Combina duas leituras 2D em uma 3D |
criar_coordenada |
Cria tuple struct Coordenada |
desestruturar_coordenada |
Extrai componentes da tuple struct |
distancia_entre |
Distância euclidiana entre duas Coordenadas |
criar_pacote_telemetria |
Cria PacoteTelemetria |
sistema_operacional |
Verifica se telemetria indica operacional |
formatar_telemetria |
Formata telemetria como relatório |
7. Exemplo
let pacote = (36.5, 101.3, 250.0);
let (temp, pressao, vel) = pacote;
assert_eq!(temp, 36.5);
let coord = Coordenada(1.0, 2.0, 3.0);
let Coordenada(x, y, z) = coord;
8. Missão
- Implementar
criar_pacote_sensoresretornando a tupla exata(36.5, 101.3, 250.0)— temperatura, pressão e velocidade do estado atual do mecha - Implementar acesso por índice:
obter_temperatura,obter_pressao,obter_velocidade - Implementar
desestruturar_pacoteeextrair_temp_pressao - Implementar
inverter_coordenadacom desestruturação - Implementar
ler_sensorcom match no código - Implementar
dividir_energiaepolar_para_cartesiano - Implementar funções de tuplas aninhadas:
criar_relatorio_movimento,obter_altitude,obter_velocidade_vetorial - Implementar tuple structs:
criar_coordenada,desestruturar_coordenada,distancia_entre - Implementar
criar_pacote_telemetria,sistema_operacional,formatar_telemetria
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
- Tuplas são fixas em tamanho — não é possível adicionar/remover elementos
- Desestruturação com
_ignora valores:let (a, _, c) = tupla - Tuple structs são úteis para dar significado sem campos nomeados
std::f64::consts::PIe métodos.cos(),.sin()para conversão polar