No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 21: Interface do Sistema (Dot Operator)
1. Narrativa
O mecha Æther é um sistema complexo com centenas de operações. Interface do Sistema ensina o piloto a organizar o código em funções claras — cada função é como um comando da cabine, com entrada, processamento e saída bem definidos. O operador . é a "interface" que conecta o piloto aos dados e operações do sistema.
Nota: Esta lição expande o conceito de funções da Lição 9, focando no operador
.como veículo para acessar e transformar dados (métodos de slice,format!, etc.).
2. Conceito
Funções são os blocos fundamentais de organização em Rust, e o operador . é a interface que acessa seus dados:
- Parâmetros: Entradas com tipos explícitos
- Retorno: Tipo de saída declarado com
-> - Expressões: Última linha sem
;é o retorno - Operador
.: Acessa métodos e campos —slice.iter(),format!(),valor.abs() - Funções como interface: Cada função encapsula uma operação do sistema, chamada pelo piloto
3. Requisitos
- Criar funções com diferentes assinaturas
- Usar parâmetros por valor e por referência
- Retornar tipos compostos
4. Design de Dados
graph LR
A[Entrada: params] --> B[Corpo da função]
B --> C{Processamento}
C --> D[Retorno: tipo]
D --> E[Chamador recebe]
A --> F[&str: referência]
A --> G[i32: valor]
D --> H[String: owned]
D --> I[bool: simples]
5. Diagrama de Fluxo
flowchart TD
A[Definir função] --> B[Parâmetros com tipos]
B --> C[Corpo: processamento]
C --> D{Tipo de retorno}
D -->|Cálculo| E[Retorna i32/f64]
D -->|Texto| F[Retorna String]
D -->|Verificação| G[Retorna bool]
E --> H[Funções auxiliares]
F --> H
G --> H
6. Funções
| Função | Descrição |
|---|---|
calcular_velocidade |
Calcula velocidade média (distância / tempo) |
formatar_status |
Formata nome e valor em string de status |
verificar_faixa |
Verifica se valor está dentro de faixa |
somar_componentes |
Soma valores de um slice |
maior_valor |
Encontra o maior valor em um slice |
criar_relatorio |
Cria relatório formatado com múltiplos dados |
converter_unidade |
Converte valor entre unidades |
calcular_eficiencia |
Calcula porcentagem de eficiência |
7. Exemplo
fn calcular_velocidade(distancia: f64, tempo: f64) -> f64 {
if tempo == 0.0 {
0.0
} else {
distancia / tempo
}
}
let vel = calcular_velocidade(100.0, 2.0);
assert_eq!(vel, 50.0);
8. Missão
- Implementar
calcular_velocidadecom divisão segura - Implementar
formatar_statususandoformat!() - Implementar
verificar_faixacom limites inclusivos - Implementar
somar_componentesiterando sobre slice - Implementar
maior_valorencontrando máximo - Implementar
criar_relatoriocombinando dados em String - Implementar
converter_unidadecom fator de conversão - Implementar
calcular_eficienciacomo porcentagem
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
- Parâmetros por valor movem ownership, por referência (
&) emprestam - A última expressão sem
;é o retorno da função format!()cria Strings formatadas comoprintln!()mas retorna o valor- Funções pequenas e focadas são mais fáceis de testar e reutilizar