Iniciante Fundamentos
Slices
Um slice é uma referência a uma parte contígua de uma coleção. Ele não toma posse dos dados, apenas aponta para um trecho.
Slice de string
Use [inicio..fim] para pegar um pedaço. O índice final é exclusivo.
fn main() {
let frase = String::from("Olá mundo");
let ola = &frase[0..3]; // "Olá"
let mundo = &frase[4..9]; // "mundo"
println!("{} | {}", ola, mundo);
}
Atalhos de índice
fn main() {
let s = String::from("programar");
let inicio = &s[..4]; // do começo: "prog"
let fim = &s[4..]; // até o fim: "ramar"
let tudo = &s[..]; // tudo
println!("{} {} {}", inicio, fim, tudo);
}
Slice de array
O mesmo funciona com arrays. O tipo é &[T].
fn main() {
let numeros = [10, 20, 30, 40, 50];
let meio = &numeros[1..4]; // [20, 30, 40]
println!("{:?}", meio);
}
Slice como parâmetro
Usar &str como parâmetro deixa a função aceitar tanto String quanto literais.
fn primeira_palavra(s: &str) -> &str {
let bytes = s.as_bytes();
for (i, &b) in bytes.iter().enumerate() {
if b == b' ' {
return &s[..i];
}
}
s
}
fn main() {
let texto = String::from("rust é rápido");
println!("{}", primeira_palavra(&texto)); // rust
}