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.