No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 25: Métodos de Sistema (Métodos/Impl)
1. Narrativa
Cada componente do mecha Æther possui suas próprias operações — o reator gera energia, os escudos protegem contra ataques, os motores impulsionam no campo de batalha. Em Rust, impl blocks permitem associar métodos e funções associadas a structs, dando a cada componente seu comportamento próprio e encapsulado.
2. Conceito
Métodos em Rust são definidos dentro de impl blocks:
&self: Leitura de dados do componente (empréstimo imutável)&mut self: Modificação do estado (empréstimo mutável)Self: Alias para o tipo da struct — útil em construtores- Funções associadas: Sem
self— construtores (new) e utilitários estáticos - Múltiplos impl blocks: Um por struct, cada qual com seus métodos
3. Requisitos
- Implementar métodos com
&selfpara consulta de dados - Implementar métodos com
&mut selfpara modificação de estado - Criar construtores com
newe funções associadas semself - Usar
Selfcomo tipo de retorno em métodos
4. Design de Dados
graph TD
A[Struct Reator] --> B[impl Reator]
B --> C[new: construtor]
B --> D[energia: &self → u32]
B --> E[consumir: &mut self → bool]
B --> F[versao_firmware: sem self]
G[Struct Escudo] --> H[impl Escudo]
I[Struct Motor] --> J[impl Motor]
5. Diagrama de Fluxo
flowchart TD
A[Início] --> B[Criar componente via new]
B --> C{Operação?}
C -->|Consultar| D[Método &self]
C -->|Modificar| E[Método &mut self]
C -->|Estático| F[Função associada]
D --> G[Retornar valor]
E --> H[Alterar estado]
F --> I[Retornar constante]
G --> J[Fim]
H --> J
I --> J
6. Funções
| Função | Descrição |
|---|---|
Reator::new |
Construtor com capacidade |
Reator::sem_energia |
Construtor alternativo sem energia |
Reator::energia |
Consulta energia atual (&self) |
Reator::capacidade |
Consulta capacidade (&self) |
Reator::porcentagem_energia |
Calcula porcentagem (&self) |
Reator::esta_operacional |
Verifica se energia > 0 (&self) |
Reator::consumir |
Consome energia (&mut self) |
Reator::recarregar |
Recarrega energia (&mut self) |
Reator::recarregar_total |
Recarrega ao máximo (&mut self) |
Reator::clonar |
Clona usando Self |
Reator::versao_firmware |
Função associada sem self |
Escudo::novo |
Construtor do escudo |
Escudo::absorver_dano |
Absorve dano e retorna excedente |
Motor::novo |
Construtor na origem |
Motor::acelerar |
Aumenta velocidade |
Motor::mover |
Move adicionando deslocamento |
Diagnostico::novo |
Construtor do diagnóstico |
Diagnostico::relatorio |
Gera relatório de status |
7. Exemplo
let mut reator = Reator::new(1000);
assert!(reator.esta_operacional());
assert_eq!(reator.porcentagem_energia(), 100.0);
reator.consumir(300);
assert_eq!(reator.energia(), 700);
assert_eq!(Reator::versao_firmware(), "REACT-4.2.1");
assert_eq!(Diagnostico::versao_sistema(), "DIAG-3.8.0");
8. Missão
- Implementar
Reator::neweReator::sem_energia - Implementar métodos de consulta:
energia,capacidade,porcentagem_energia,esta_operacional - Implementar métodos de modificação:
consumir,recarregar,recarregar_total - Implementar
Reator::clonareReator::versao_firmware(retorna"REACT-4.2.1") - Implementar todos os métodos de
Escudo - Implementar todos os métodos de
Motor - Implementar todos os métodos de
Diagnostico—versao_sistema()deve retornar"DIAG-3.8.0"
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
&selfé açúcar paraself: &Self— empréstimo imutável do receptor&mut selfpermite modificar campos — apenas um empréstimo mutável por vez- Funções associadas (sem self) são chamadas via
Struct::funcao(), nãoinstancia.funcao() Selfno retorno facilita refatoração — se renomear a struct, não precisa atualizar