Rullst AcademyRullst Academy/Lição
Rust II: dados, escolhas e confiança · Lição 03 / 12

Texto não é uma fila de letras simples

A palavra ação tem quatro letras, mas ocupa seis bytes em UTF-8. Escolher a medida certa evita cortes incorretos.

Trilhas de aprendizado10 min

Vamos descobrir juntos

  1. 1

    String possui um texto UTF-8 e pode crescer. &str é uma visão emprestada de uma sequência UTF-8 válida; a função pode ler sem receber a posse.

  2. 2

    len() mede bytes. chars().count() conta valores escalares Unicode. Em ação: a e o usam um byte cada; ç e ã usam dois cada.

  3. 3

    Um caractere visual pode reunir mais de um valor escalar, como uma letra com acento combinante ou alguns emojis. chars().count() não é uma medida universal de letras percebidas pelo leitor.

  4. 4

    String não oferece acesso por índice inteiro a uma letra. Um corte por bytes exige limites UTF-8 válidos. Prefira operações adequadas, como split_whitespace para palavras ou get para um corte que possa falhar.

DA LIÇÃO PARA A PRÁTICA

Guia para acompanhar no seu ritmo

Leia os passos antes de usar a referência abaixo. Comandos são executados no terminal do sistema indicado; o cadastro acontece no site oficial. Os exercícios da Rullst Academy são treino e não verificam sua instalação ou conta externa.

fn main() {
    let text = String::from("ação");
    println!("{} {}", text.len(), text.chars().count());
}

Links oficiais e próximo passo

✦
SUA MISSÃO

Distinguir String, &str, bytes e valores escalares Unicode.

Agora é a sua vez

Oficina de descobertas

Leia, preveja, investigue

Preveja antes de mostrar. Este painel revela resultados preparados, não compila seu código. Erros de compilação são resumidos; o texto exato pode variar com a versão do compilador.
Mini experimento

Simulação didática: compare os cartões e confira suas previsões. O navegador não está compilando Rust nem iniciando um servidor.

fn main() {
    let text = String::from("ação");
    println!("{} {}", text.len(), text.chars().count());
}
Monte suas respostas e confira quando estiver pronto.
Uma pausa para entender

chars().count() sempre conta símbolos visuais?

Preciso de uma pista

Bytes, valores escalares e caracteres visuais são medidas diferentes.

Carregando sua jornada…

Leve com você

Troque o texto por café e depois por um emoji. Registre bytes e chars. Experimente text.get(0..2) com ação e explique por que pode retornar None sem travar o programa.

RUST II · .rs

Sua bancada Rust II

Leia, preveja e responda aqui. Para compilar de verdade, extraia o ZIP da atividade em uma pasta nova, abra o terminal ao lado de Cargo.toml e use os comandos abaixo. Rust e as ferramentas do seu sistema precisam estar instalados.

cargo check --offline
cargo test --offline
cargo run --offline
Meus arquivos e GitHub

O editor abaixo salva um rascunho neste navegador e permite baixar ou publicar seu .rs. Para executá-lo no projeto, salve o arquivo editado como src/main.rs. O ZIP contém a versão inicial; os resultados preparados não mudam com suas edições. A avaliação online não comprova execução local.

No seu ritmo

Meus arquivos e GitHub

Toda lição pode virar um registro seu: código, anotações ou um plano de prática. Guardar um arquivo no GitHub é opcional e não altera seu XP.

Manual do aluno

O editor e os downloads abrem quando esta lição estiver liberada para sua conta. Confira o acesso abaixo ou volte ao mapa da trilha.

Conferindo seu acesso à lição…

Rullstpetbot

A IA pode errar. Confira no material da lição.