Menu
Coddy logo textTech

Borrow en bucles

Parte de la sección Fundamentals del Journey de Rust de Coddy — lección 67 de 75.

Cuando escribimos un bucle en Rust, tenemos dos formas principales de trabajar con nuestros datos: podemos mirarlos (usando &) o tomarlos. Por ejemplo, considera los siguientes datos:

let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;

Método 1: Mirando los datos (usando &):

for number in &numbers {
    sum += number;
}
println!("I can use it here: {:?}", numbers);

Método 2: Tomar los datos (sin &):

for number in numbers {
    sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// Esto causaría un error

Piénsalo de esta manera:

  1. Usar & es como mirar un álbum de fotos: puedes ver todas las fotos, pero el álbum permanece intacto
  1. No usar & es como sacar las fotos: puedes usarlas, pero el álbum quedará vacío después

Ahora este estilo:

for num in numbers.iter() {}

Es similar a esto:

for num in &numbers {}

Y un bucle de mutación:

for num in numbers.iter_mut() { 
    *num *= 2;
}

También se puede escribir de esta manera:

for num in &mut numbers { 
    *num *= 2;
}

Hoja de referencia

En los bucles de Rust, puedes observar los datos (usando &) o tomar la propiedad de ellos:

Observar datos (préstamo):

let numbers = vec![1, 2, 3, 4, 5];
for number in &numbers {
    sum += number;
}
// numbers can still be used after the loop

Tomar la propiedad:

let numbers = vec![1, 2, 3, 4, 5];
for number in numbers {
    sum += number;
}
// numbers cannot be used after the loop

Métodos de iterador:

// These are equivalent:
for num in numbers.iter() {}
for num in &numbers {}

// For mutation:
for num in numbers.iter_mut() { *num *= 2; }
for num in &mut numbers { *num *= 2; }

Pruébalo tú mismo

Esta lección no incluye un desafío de código.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentals