Primeros pasos en Rust - Slices

Apuntes de Rust - Parte 8

En Rust, los slices son una forma de referenciar una porción contigua de datos en una colección, como un array o un vector, muy similares a los slices en Python. Los slices permiten hacer referencia a una secuencia contigua de elementos en una colección en lugar de toda la colección. Un slice es una especie de referencia, por lo que no posee la propiedad de los datos.

Los slices proporcionan una vista temporal e inmutable de los datos sin tomar propiedad. Son muy útiles para trabajar con subconjuntos de datos sin tener que copiarlos o modificarlos.

Un slice en Rust se representa mediante un rango del tipo &[T], donde T es el tipo de datos que se encuentra en la colección subyacente. Los slices se componen de un puntero al inicio de la porción de datos y una longitud que indica cuántos elementos contiene.

Ejemplo, slice de un array:

fn main() {
    let un_arreglo = [1, 2, 3, 4, 5];
    // Slice que abarca desde el índice 1 hasta el índice 3 
    let un_slice = &un_arreglo[1..4];  

    // Imprime "[2, 3, 4]"
    println!("{:?}", un_slice );  
}

En este ejemplo, creamos un slice slice que abarca desde el segundo elemento hasta el cuarto elemento del array un_arreglo. El operador .. se utiliza para especificar el rango de índices. En este caso, el índice 1 es inclusivo y el índice 4 es excluido.

Nota: Recordemos que el primer elemento de un array en Rust corresponde a la posición o índice 0.

Ejemplo, slice de un String:

fn main() {
    let una_cadena = String::from("Hola Rust!");
    // Slice que abarca desde el índice 4 hasta el índice 8
    let slice = &una_cadena [5..9];  

    // Imprime "Rust"
    println!("{}", slice);  
}

En el ejemplo, creamos una variable una_cadena de tipo String que contiene la cadena de texto "Hola Rust!". Luego, creamos un slice slice que abarca desde el quinto carácter (índice 5) hasta el noveno carácter (índice 8) de la cadena.

Es importante tener en cuenta que en un slice el índice de final en el rango del slice es excluido, lo que significa que el carácter en el índice final no está incluido en el slice resultante.

En este caso, el slice captura los caracteres "Rust" de la cadena original y se imprime por pantalla. Los slices de String en Rust trabajan con valores Unicode y se manejan correctamente para mantener la integridad de los caracteres.

Referencias

  • The Rust Programming Language. 2nd Edition by Steve Klabnik and Carol Nichols, with contributions from the Rust Community. 2023

Did you find this article valuable?

Support Jesse Padilla by becoming a sponsor. Any amount is appreciated!