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
}