Menu
Coddy logo textTech

Borrow no Loop

Parte da seção Fundamentals do Journey de Rust da Coddy — lição 67 de 75.

Quando escrevemos um loop em Rust, temos duas maneiras principais de trabalhar com nossos dados: podemos olhar para eles (usando &) ou pegá-los. Por exemplo, considere os seguintes dados:

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

Método 1: Olhando para os dados (usando &):

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

Método 2: Pegando os dados (sem &):

for number in numbers {
    sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// Isso causaria um erro

Pense nisso desta forma:

  1. Usar & é como olhar para um álbum de fotos: você pode ver todas as fotos, mas o álbum permanece intacto
  1. Não usar & é como tirar as fotos: você pode usá-las, mas o álbum ficará vazio depois

Agora este estilo:

for num in numbers.iter() {}

É semelhante a isto:

for num in &numbers {}

E um loop de mutação:

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

Também pode ser escrito desta forma:

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

Folha de consulta

Em loops no Rust, você pode observar os dados (usando &) ou assumir a propriedade (ownership) deles:

Observando os dados (empréstimo/borrowing):

let numbers = vec![1, 2, 3, 4, 5];
for number in &numbers {
    sum += number;
}
// numbers ainda pode ser usado após o loop

Assumindo a propriedade (ownership):

let numbers = vec![1, 2, 3, 4, 5];
for number in numbers {
    sum += number;
}
// numbers não pode ser usado após o loop

Métodos de iterador:

// Estes são equivalentes:
for num in numbers.iter() {}
for num in &numbers {}

// Para mutação:
for num in numbers.iter_mut() { *num *= 2; }
for num in &mut numbers { *num *= 2; }

Experimente você mesmo

Esta lição não inclui um desafio de código.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentals