No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 15: Duplicação de Dados (Replicação de Componentes)
1. Narrativa
O mecha Æther possui componentes que podem ou não ser replicados. Peças simples (como parafusos) podem ser copiadas instantaneamente, mas subsistemas complexos exigem um processo de clonagem mais elaborado. Duplicação de Dados ensina o piloto quando usar Copy e Clone para duplicar valores com segurança.
2. Conceito
Rust controla a duplicação de dados através de traits:
Copy: Tipos simples que podem ser copiados bit-a-bit (i32, f64, bool, char, tuplas de Copy)Clone: Tipos que precisam de duplicação explícita via.clone()(String, Vec)- Semântica de move: Tipos sem Copy são movidos, não copiados
- Escolha consciente: O compilador impede cópias acidentais de dados caros
3. Requisitos
- Criar funções que demonstram duplicação de dados
- Diferenciar comportamento Copy vs Clone
- Usar
.clone()explicitamente quando necessário
4. Design de Dados
graph LR
A[Valor Original] --> B{Implementa Copy?}
B -->|Sim| C[Cópia automática]
B -->|Não| D{Usou .clone?}
D -->|Sim| E[Clone profundo]
D -->|Não| F[Move - original invalidado]
5. Diagrama de Fluxo
flowchart TD
A[Receber valor] --> B{Tipo é Copy?}
B -->|Sim| C[Copiar automaticamente]
B -->|Não| D[Precisa de clone?]
D -->|Sim| E[Chamar .clone]
D -->|Não| F[Mover ownership]
C --> G[Ambas variáveis válidas]
E --> G
F --> H[Apenas nova variável válida]
6. Funções
| Função | Descrição |
|---|---|
copiar_inteiro |
Demonstra cópia automática de i32 |
clonar_string |
Clona uma String explicitamente |
copiar_tupla |
Copia tupla de tipos Copy |
clonar_vetor |
Clona um Vec profundamente |
trocar_valores |
Troca dois valores usando Copy |
duplicar_primeiro |
Retorna duas cópias do primeiro elemento |
juntar_copiados |
Soma valores copiados de um slice |
clonar_e_modificar |
Clona string e modifica o clone |
7. Exemplo
let original = String::from("mecha");
let clone = original.clone();
// Ambos são válidos e independentes
assert_eq!(original, clone);
8. Missão
- Implementar
copiar_inteirodemonstrando cópia de i32 - Implementar
clonar_stringusando.clone() - Implementar
copiar_tuplacom tuplas de tipos Copy - Implementar
clonar_vetorusando.clone()em Vec - Implementar
trocar_valorestrocando dois i32 (Copy) - Implementar
duplicar_primeiroretornando duas cópias do primeiro elemento - Implementar
juntar_copiadossomando valores copiados - Implementar
clonar_e_modificarclonando e modificando String
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
- Tipos primitivos implementam
Copyautomaticamente StringeVec<T>NÃO são Copy — precisam de.clone()- Se um tipo contém algo não-Copy (como String), ele não pode ser Copy
- Prefira empréstimo (borrowing) a clonagem quando possível para eficiência