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

Lição 14: Dados Textuais (Comunicação do Mecha)

1. Narrativa

O mecha Æther precisa trocar mensagens constantemente com a base e processar sinais de texto dos seus sensores. Dados Textuais são a base da comunicação — o piloto deve dominar String e &str para manipular, concatenar e extrair informações das transmissões recebidas.

2. Conceito

Em Rust, existem dois tipos principais de texto:

  • String: Alocada no heap, mutável, com ownership próprio
  • &str: Slice de string, referência imutável para dados textuais
  • Operações: concatenação, fatiamento, busca, substituição
  • Conversão: .to_string(), .parse(), format!()

3. Requisitos

  • Criar funções que manipulam String e &str
  • Converter entre tipos textuais
  • Extrair substrings e buscar padrões

4. Design de Dados

graph LR
    A[&str slice] --> B[.to_string]
    B --> C[String heap]
    C --> D[.as_str]
    D --> A
    C --> E[+ concatenar]
    E --> F[String resultado]

5. Diagrama de Fluxo

flowchart TD
    A[Entrada: &str] --> B{Tipo de operação}
    B -->|Converter| C[.to_string]
    B -->|Buscar| D[.find / .contains]
    B -->|Fatiar| E[&str_slice]
    B -->|Concatenar| F[format! ou +]
    C --> G[Retorna String]
    D --> G
    E --> G
    F --> G

6. Funções

Função Descrição
inverter_texto Inverte os caracteres de uma string
contar_palavras Conta o número de palavras no texto
maiusculas Converte texto para maiúsculas
primeiras_letras Retorna os N primeiros caracteres como String
contem_padrao Verifica se o texto contém um padrão
substituir_texto Substitui todas as ocorrências de um padrão
juntar_com_virgula Concatena slice de strings com vírgulas
remover_espacos Remove espaços do início e fim

7. Exemplo

let texto = "  mecha Æther online  ";
let limpo = texto.trim();
let maiusculo = limpo.to_uppercase();
assert_eq!(maiusculo, "MECHA ÆTHER ONLINE");

8. Missão

  1. Implementar inverter_texto usando .chars().rev().collect()
  2. Implementar contar_palavras usando .split_whitespace().count()
  3. Implementar maiusculas usando .to_uppercase()
  4. Implementar primeiras_letras usando fatiamento de chars
  5. Implementar contem_padrao usando .contains()
  6. Implementar substituir_texto usando .replace()
  7. Implementar juntar_com_virgula usando .join()
  8. Implementar remover_espacos usando .trim().to_string()

9. Como Executar

cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check

10. Dicas

  • &str é uma referência, String tem ownership — escolha com sabedoria
  • Use .to_string() para converter &str em String
  • Fatiamento direto [..n] pode quebrar caracteres Unicode — prefira .chars()
  • .trim() remove espaços de ambas as extremidades