Por que em Rust transformar a primeira letra de uma string em maiúscula é uma tarefa tão não trivial?
Olá, colegas!
Comecei a aprender Rust há relativamente pouco tempo, vindo do Python e JavaScript. Lá é simples: `"hello".capitalize()` ou `str[0].toUpperCase() + str.slice(1)`. Mas em Rust me deparei com o fato de que até mesmo uma operação básica como tornar a primeira letra de uma string maiúscula exige danças com pandeiro.
Escrevi este código:
```rust
fn capitalize_first(s: &str) -> String {
let mut chars = s.chars();
match chars.next() {
Some(first) => first.to_uppercase().to_string() + chars.as_str(),
None => String::new(),
}
}
fn main() {
println!("{}", capitalize_first("hello")); // quero "Hello"
println!("{}", capitalize_first("привет")); // quero "Привет"
}
```
À primeira vista, tudo funciona. Mas quando tentei processar a string `"straße"` (palavra alemã para "rua"), obtive `"Straße"`, embora esperasse `"Straße"` (em alemão, ß ao ser capitalizado se transforma em SS, e o comprimento da string muda!). E se eu passar um emoji ou caracteres acentuados