09 ‐ Loops - sabrinabm94/javascript GitHub Wiki

9 - Explorando mais sobre os métodos de iteração em JavaScript

Ao programar em JavaScript, é essencial entender as diferentes formas de iterar sobre arrays e outros iteráveis. Neste capítulo, vamos conhecer mais sobre os métodos tradicionais de loop, como for e while, bem como métodos de iteração modernos, como forEach e for...of. Além disso, reforçaremos as discussões sobre o uso de instruções de controle, como break, continue e return, para controlar o fluxo de execução dentro de loops.

9.1 For

O for é o método tradicional de loop, oferecendo acesso a cada elemento, ao contador do loop e controle sobre cada operação.

const fruits = ['Apple', 'Banana', 'Cherry'];
for (let i = 0; i < fruits.length; i++) {
  console.log(`Fruit ${i}: ${fruits[i]}`);
}
// Saída: Fruit 0: Apple, Fruit 1: Banana, Fruit 2: Cherry

Esse loop for itera sobre um array de strings, baseado no valor da quantidade total de itens do array, identificado pela propriedade length e passando por todos os itens no raio de zero indicado no i = 0, até a quantidade máxima de itens do array, exibindo cada string junto com seu índice no console.

9.2 While

O loop while é útil quando a duração do loop depende de uma condição dinâmica. Ele continua funcionando enquanto a condição for verdadeira.

const fruits = ['Apple', 'Banana', 'Cherry'];
let i = 0;
while (i < fruits.length) {
  console.log(fruits[i]);
  i++;
}
// Saída: Apple, Banana, Cherry

Aqui utilizamos o loop while para iterar sobre um array de strings, similar ao anterior feito com for, entanto aqui não temos o número do índice para apresentar. Indicando novamente o indice começando com valor 0, i = 0, e passando por todos os itens da lista até o indice tomar o valor igual a quantidade máxima de itens do array em questão, indicado pela propriedade length.

Um ponto importante é atenção é não criar loops infinitos, que podem continuar rodando indefinidamente e causar problemas de performance no código, como no exemplo abaixo.

const i = 3;
while (i < 4) {
  console.log("Loop infinito rodando...");
}
// Saída: Loop infinito rodando...

9.3 ForEach

O método forEach é uma maneira popular e legível de iterar sobre arrays, executando uma função para cada elemento.

const fruits = ["apple", "banana", "cherry"];

fruits.forEach(function(fruit) {
  console.log(fruit);
});
// Saída: Apple, Banana, Cherry

Aqui trabalhamos com o loop for each na mesma listagem de strings do exemplo anterior, obtendo o resultado de cada um de seus valores impressos no console. Neste caso o não é necessário indicar o valor do índice como sendo zero ou utilizar a propriedade length para controlar o loop, pois o for each já cuida desses pontos.

9.4 Break, Continue e Return

O método forEach não suporta instruções de controle tradicionais como break ou return. No entanto, em loops tradicionais, break e continue são úteis para modificar o fluxo de execução.

const numbers = [1, 2, 3, 4, 5];

numbers.forEach(number => {
  if (number > 3) {
    break; 
    // Saída: Uncaught SyntaxError: Illegal break statement
  }
  console.log(number);
});
for(let i = 10; i > 0; i--) {
  if(i === 4) {
    continue;
  }
  if(i === 2) {
    break;
  }
  console.log(i); 
  // Saída 10, 9, 8, 7, 6, 5, 3
}

No exemplo acima, utilizando o loop for para contar de 10 a 1, excluindo os números 4 e 2 utilizando o continue, que pulará a impressão do 4 e o break, que pulará a impressão do 2, e imprimir os números restantes no console.

9.5 Return

O Return interrompe apenas a iteração atual em forEach, não afetando o restante do loop como um todo.

const numbers = [1, 2, 3, 4, 5];

numbers.forEach(number => {
  if (number === 3) {
    return; 
    // Sai apenas da iteração atual
  }
  console.log(number);
});
// Saída: 1, 2, 4, 5

Nesse contexto, o return interrompe o loop do código quando o valor da listagem é igual ao número 3, quebrando por tanto a continuidade desse ciclo do código, continuando somente no próximo valor, que seria a impressão do valor 4 e assim por diante.

9.6 For...of

O loop for...of, introduzido no ES6, oferece uma maneira moderna e versátil de iterar sobre objetos iteráveis.

const numbers = [1, 2, 3, 4, 5];

for (const number of numbers) {
  if (number > 3) { // Verifica se o número é menor que 3
    break; 
    // Interrompe o loop com sucesso
  }
  console.log(number);
}
// Saída: 1, 2, 3

Este código itera sobre os números do array e os imprime até que um número atual seja menor que 3, caso seja maior, o loop é quebrado e os valores 4 e 5 não serão apresentados no console do navegador.

9.7 For in

O for in é utilizado para iterar sobre as propriedades enumeráveis de um objeto. Embora seja comumente utilizado para iterar sobre as propriedades de objetos, seu uso em arrays é desencorajado devido à inclusão de propriedades herdadas. Em arrays, ele itera sobre todas as propriedades enumeráveis, o que pode incluir mais do que apenas os elementos do array.

const fruits = ['Apple', 'Banana', 'Cherry'];
for (const index in fruits) {
  console.log(`Fruit ${index}: ${fruits[index]}`);
}
// Saída: Fruit 0: Apple, Fruit 1: Banana, Fruit 2: Cherry

Com esse loop, podemos trabalhar com os valores do index, da mesma forma que temos no for tradicional.

Embora funcione corretamente para iterar sobre arrays, é importante ter em mente que pode incluir propriedades não relacionadas aos elementos do array, como métodos ou propriedades herdadas, o que pode não ser desejado em todas as situações.

Entender os diferentes métodos de iteração e as instruções de controle em JavaScript é fundamental para escrever código eficiente e legível. Os loops tradicionais for e while oferecem controle preciso sobre o fluxo de execução, enquanto métodos modernos como forEach e for...of simplificam a iteração sobre arrays e outros iteráveis. É importante lembrar as limitações de cada método e escolher o mais adequado para cada situação. Combinando esses conceitos e técnicas, você poderá escrever código JavaScript mais robusto e elegante para uma variedade de aplicativos e projetos.

No próximo capítulo, vamos abordar um conceito importante em JavaScript: a diferença entre função e método. Entender essa distinção é fundamental para escrever código claro, modular e reutilizável.