Introducció

En Rust, els slices són una manera de referenciar una seqüència contigua d'elements en una col·lecció, com ara un array o un vector, sense posseir-los. Els slices permeten treballar amb subparts de col·leccions de manera segura i eficient.

Conceptes Clau

  • Slice: Una referència a una seqüència contigua d'elements en una col·lecció.
  • Array: Una col·lecció de mida fixa d'elements del mateix tipus.
  • Vector: Una col·lecció dinàmica que pot canviar de mida.

Creació de Slices

Slices d'Arrays

Un slice d'un array es crea utilitzant la notació de rang (start..end), on start és l'índex inicial (inclòs) i end és l'índex final (exclòs).

fn main() {
    let array = [1, 2, 3, 4, 5];
    let slice = &array[1..4]; // Slice dels elements 2, 3 i 4
    println!("{:?}", slice); // Sortida: [2, 3, 4]
}

Slices de Vectors

Els slices de vectors es creen de la mateixa manera que els slices d'arrays.

fn main() {
    let vector = vec![1, 2, 3, 4, 5];
    let slice = &vector[1..4]; // Slice dels elements 2, 3 i 4
    println!("{:?}", slice); // Sortida: [2, 3, 4]
}

Propietat i Slices

Els slices no posseeixen les dades a les quals fan referència. En canvi, són referències immutables o mutables a una part de la col·lecció original.

Slice Immutables

Un slice immutable no permet modificar els elements de la col·lecció original.

fn main() {
    let array = [1, 2, 3, 4, 5];
    let slice = &array[1..4];
    // slice[0] = 10; // Error: no es pot modificar un slice immutable
    println!("{:?}", slice); // Sortida: [2, 3, 4]
}

Slice Mutables

Un slice mutable permet modificar els elements de la col·lecció original.

fn main() {
    let mut array = [1, 2, 3, 4, 5];
    let slice = &mut array[1..4];
    slice[0] = 10; // Modifica el segon element de l'array original
    println!("{:?}", slice); // Sortida: [10, 3, 4]
    println!("{:?}", array); // Sortida: [1, 10, 3, 4, 5]
}

Exercicis Pràctics

Exercici 1: Crear un Slice d'un Array

Crea un slice dels elements centrals d'un array i imprimeix-lo.

fn main() {
    let array = [10, 20, 30, 40, 50, 60];
    let slice = &array[2..5];
    println!("{:?}", slice); // Esperat: [30, 40, 50]
}

Exercici 2: Modificar Elements d'un Slice Mutable

Crea un slice mutable d'un vector i modifica els seus elements.

fn main() {
    let mut vector = vec![1, 2, 3, 4, 5];
    let slice = &mut vector[1..4];
    slice[0] = 20;
    slice[1] = 30;
    println!("{:?}", slice); // Esperat: [20, 30, 4]
    println!("{:?}", vector); // Esperat: [1, 20, 30, 4, 5]
}

Errors Comuns

  • Índex Fora de Rang: Intentar accedir a un índex fora del rang del slice original causarà un error en temps d'execució.
  • Mutabilitat Incorrecta: Intentar modificar un slice immutable causarà un error de compilació.

Resum

En aquesta secció, hem après què són els slices en Rust i com es poden utilitzar per referenciar subparts d'arrays i vectors. Hem vist com crear slices immutables i mutables, i hem practicat amb alguns exercicis per reforçar aquests conceptes. Els slices són una eina poderosa per treballar amb col·leccions de manera segura i eficient, i són fonamentals per comprendre la gestió de memòria en Rust.

© Copyright 2024. Tots els drets reservats