Declarações de repetição em TypeScript

Declarações de repetição em TypeScript

Este artigo explica as declarações de repetição em TypeScript.

YouTube Video

A declaração for no TypeScript

A declaração for no TypeScript é uma estrutura de loop básica para realizar operações repetidas. Em um loop for, o mesmo bloco de código pode ser executado repetidamente com base em um número de vezes ou condições especificadas.

Sintaxe Básica

1for (initialization; condition; update) {
2    // Code to execute repeatedly while the condition is true
3}
  • inicialização*: Esta é a parte que é executada apenas uma vez antes de iniciar o loop. Inicializar variáveis como contadores de loop.
  • Condições (condição)*: Determina se o loop continua. Se for verdade, continue a loop, e se false, saia.
  • Update (update): Execute no final de cada loop e atualize o contador de loop.

Exemplo 1: Loop básico for

No exemplo abaixo, ele exibe os números de 0 a 4 em ordem.

1for (let i = 0; i < 5; i++) {
2    console.log("The value of i is: " + i);
3}
4// Outputs:
5// The value of i is: 0
6// The value of i is: 1
7// The value of i is: 2
8// The value of i is: 3
9// The value of i is: 4

Exemplo 2: Loop for com um array

Você também pode usar um loop for para processar os elementos de um array em ordem.

1let fruits: string[] = ["apple", "banana", "cherry"];
2
3for (let i = 0; i < fruits.length; i++) {
4    console.log("Fruit: " + fruits[i]);
5}
6// Outputs:
7// Fruit: apple
8// Fruit: banana
9// Fruit: cherry

Exemplo 3: Loop for-in

O loop for-in é usado para iterar sobre as propriedades de um objeto ou os índices de um array em ordem.

1let car = { brand: "Toyota", model: "Corolla", year: 2020 };
2
3for (let key in car) {
4    console.log(key + ": " + car[key]);
5}
6// Outputs:
7// brand: Toyota
8// model: Corolla
9// year: 2020

Exemplo 4: Loop for-of

O loop for-of é usado para obter o valor de cada elemento em ordem a partir de objetos iteráveis como arrays ou strings.

1let colors: string[] = ["red", "green", "blue"];
2
3for (let color of colors) {
4    console.log("Color: " + color);
5}
6// Outputs:
7// Color: red
8// Color: green
9// Color: blue

Exemplo 5: Loop for Aninhado

Também é possível usar um loop for dentro de outro loop for, conhecido como um loop aninhado. Isso permite criar loops duplos, entre outras coisas.

 1for (let i = 0; i < 3; i++) {
 2    console.log("Outer loop i: " + i);
 3    for (let j = 0; j < 2; j++) {
 4        console.log("  Inner loop j: " + j);
 5    }
 6}
 7// Outputs:
 8// Outer loop i: 0
 9//   Inner loop j: 0
10//   Inner loop j: 1
11// Outer loop i: 1
12//   Inner loop j: 0
13//   Inner loop j: 1
14// Outer loop i: 2
15//   Inner loop j: 0
16//   Inner loop j: 1

Resumo

  • A instrução for realiza processamento repetitivo baseado em contagens ou condições especificadas.
  • for-in é usado para recuperar as propriedades de um objeto ou os índices de um array.
  • for-of recupera os valores dos elementos de objetos iteráveis como arrays.
  • Processamento repetitivo complexo também é possível com loops for aninhados.

A declaração for no TypeScript oferece um processamento repetitivo poderoso e flexível, semelhante a outros loops.

Declarações While no TypeScript

Em TypeScript, uma declaração while é uma estrutura de loop que executa um processo repetitivo enquanto a condição especificada for true. Semelhante ao loop for, o loop while é adequado para casos em que o número de iterações não está predefinido ou quando você deseja controlar a repetição com base em uma condição.

Sintaxe Básica

1while (condition) {
2    // Code to execute repeatedly while the condition is true
3}
  • Condição: A condição sob a qual o loop é executado. O loop continua enquanto essa condição for true e para quando se tornar false.

Exemplo 1: Loop básico while

No exemplo abaixo, ele continua exibindo o valor de i enquanto i for menor que 5.

 1let i: number = 0;
 2
 3while (i < 5) {
 4    console.log("The value of i is: " + i);
 5    i++;
 6}
 7// Outputs:
 8// The value of i is: 0
 9// The value of i is: 1
10// The value of i is: 2
11// The value of i is: 3
12// The value of i is: 4

Neste exemplo, o loop termina quando i se torna 5 ou maior porque a condição se torna false.

Exemplo 2: Exemplo de Loop Infinito

Se a condição em um loop while for sempre true, ele pode se tornar um loop infinito. Isso geralmente faz com que o programa não pare como esperado, por isso é necessário cuidado.

 1let x: number = 0;
 2
 3while (true) {
 4    console.log("The value of x is: " + x);
 5    x++;
 6    if (x >= 5) {
 7        break; // Exit the loop when the condition is met
 8    }
 9}
10// Outputs:
11// The value of x is: 0
12// The value of x is: 1
13// The value of x is: 2
14// The value of x is: 3
15// The value of x is: 4

Você pode usar a declaração break para sair forçosamente do loop quando uma condição for atendida.

Exemplo 3: Loop do-while

O loop do-while é uma estrutura onde o processo de repetição é executado pelo menos uma vez. Como a condição é avaliada após o processo, o processo é executado pelo menos uma vez, mesmo que a condição seja false.

1let j: number = 5;
2
3do {
4    console.log("The value of j is: " + j);
5    j++;
6} while (j < 5);
7// Outputs: The value of j is: 5

Neste exemplo, j é 5 desde o início, e j < 5 é false, mas em um loop do-while, ele é executado pelo menos uma vez, independentemente da condição.

Resumo

  • Um loop while repete o processamento enquanto a condição for true.
  • Se a condição de término do loop não for clara, é necessário ter cuidado com loops infinitos.
  • Um loop do-while difere de um loop while normal, pois o processamento é executado pelo menos uma vez.

A declaração while em TypeScript é útil para processamentos em loop com contagens de iteração incertas ou quando a verificação de condições dinâmicas é necessária.

break e continue

Você pode usar break e continue dentro dos laços.

  • break é usado para encerrar um laço prematuramente.
  • continue é usado para pular a iteração atual e passar para a próxima iteração.

Exemplo de break

 1for (let i = 0; i < 10; i++) {
 2    if (i === 5) {
 3        break;  // Exits the loop when i is 5
 4    }
 5    console.log(i);
 6}
 7// Outputs 0, 1, 2, 3, 4
 8
 9let i = 0;
10
11while (i < 10) {
12    if (i === 5) {
13        break;  // Ends the loop when i is 5
14    }
15    console.log(i++);
16}
17// Outputs 0, 1, 2, 3, 4

Neste caso, break é executado quando i se torna 5. Como resultado, os números de 0 a 4 são exibidos.

Exemplo de continue

 1for (let i = 0; i < 5; i++) {
 2    if (i === 2) {
 3        continue;  // Skips when i is 2
 4    }
 5    console.log(i);
 6}
 7// Outputs 0, 1, 3, 4
 8
 9let i = 0;
10
11while (i < 5) {
12    i++;
13    if (i === 3) {
14        continue;  // Skips when i is 3
15    }
16    console.log(i);
17}
18// Outputs 1, 2, 4, 5

Neste caso, continue é executado quando i é 2. Como resultado, os números, exceto 2, são exibidos.

Laços aninhados em TypeScript

Um laço aninhado é uma estrutura onde um laço é usado dentro de outro laço. Em TypeScript, são suportados construtos de laços como for, while e do-while. Ao usar laços aninhados, você pode processar arrays bidimensionais (matrizes) e simplificar o processamento com base em várias condições.

Sintaxe Básica

A sintaxe básica de um laço aninhado é a seguinte.

1for (let i: number = 0; i < n; i++) {
2  for (let j: number = 0; j < m; j++) {
3    // Processing for the inner loop
4  }
5}

Para cada execução do laço externo, o laço interno completa todas as suas iterações. Essa estrutura é muito útil ao lidar com vários laços ou estruturas de dados.

Exemplo de um laço aninhado em TypeScript

Percorrendo um array bidimensional

Os laços aninhados são frequentemente usados ao manipular estruturas de dados multidimensionais, como arrays bidimensionais. No exemplo a seguir, os elementos de um array bidimensional são percorridos, e seus valores são exibidos no console.

 1const matrix: number[][] = [
 2  [1, 2, 3],
 3  [4, 5, 6],
 4  [7, 8, 9]
 5];
 6
 7for (let row: number = 0; row < matrix.length; row++) {
 8  for (let col: number = 0; col < matrix[row].length; col++) {
 9    console.log(`matrix[${row}][${col}] = ${matrix[row][col]}`);
10  }
11}
12// Output
13// matrix[0][0] = 1
14// matrix[0][1] = 2
15// matrix[0][2] = 3
16// matrix[1][0] = 4
17// matrix[1][1] = 5
18// matrix[1][2] = 6
19// matrix[2][0] = 7
20// matrix[2][1] = 8
21// matrix[2][2] = 9

Neste exemplo, estamos percorrendo o array bidimensional matrix. O loop externo lida com as linhas, e o loop interno lida com as colunas, exibindo cada elemento em ordem.

Combinação de dois arrays

A seguir, apresentamos um exemplo de cálculo de todas as combinações de dois arrays. Por exemplo, você pode pegar um elemento de cada um dos dois arrays e exibir todos os pares possíveis.

 1const array1: string[] = ['A', 'B', 'C'];
 2const array2: number[] = [1, 2, 3];
 3
 4for (let i: number = 0; i < array1.length; i++) {
 5  for (let j: number = 0; j < array2.length; j++) {
 6    console.log(`Pair: (${array1[i]}, ${array2[j]})`);
 7  }
 8}
 9// Output
10// Pair: (A, 1)
11// Pair: (A, 2)
12// Pair: (A, 3)
13// Pair: (B, 1)
14// Pair: (B, 2)
15// Pair: (B, 3)
16// Pair: (C, 1)
17// Pair: (C, 2)
18// Pair: (C, 3)

Neste exemplo, todos os pares entre o array de strings array1 e o array de números array2 são criados. O loop externo extrai elementos de array1, e o loop interno extrai elementos de array2, exibindo cada par.

Gerando coordenadas com um loop triplo

Usando loops aninhados triplos, você pode gerar coordenadas em um espaço tridimensional, por exemplo.

 1for (let x: number = 0; x < 3; x++) {
 2  for (let y: number = 0; y < 3; y++) {
 3    for (let z: number = 0; z < 3; z++) {
 4      console.log(`Coordinate: (${x}, ${y}, ${z})`);
 5    }
 6  }
 7}
 8// Output
 9// Coordinate: (0, 0, 0)
10// Coordinate: (0, 0, 1)
11// Coordinate: (0, 0, 2)
12// ...
13// Coordinate: (2, 2, 1)
14// Coordinate: (2, 2, 2)

Dessa forma, o uso de loops aninhados triplos permite gerar coordenadas em um espaço tridimensional com facilidade.

Desempenho de loops aninhados

Loops aninhados são convenientes, mas o custo computacional aumenta rapidamente à medida que a profundidade dos loops cresce. Por exemplo, se houver n iterações do loop externo e m iterações do loop interno, o número total de iterações será n * m. Quando isso é ainda mais aninhado, a complexidade computacional aumenta exponencialmente, podendo afetar o desempenho do programa.

Abaixo estão as complexidades computacionais ao percorrer três arrays.

 1const array1: number[] = [1, 2, 3];
 2const array2: number[] = [4, 5, 6];
 3const array3: number[] = [7, 8, 9];
 4
 5for (let i: number = 0; i < array1.length; i++) {
 6  for (let j: number = 0; j < array2.length; j++) {
 7    for (let k: number = 0; k < array3.length; k++) {
 8      console.log(`Combination: (${array1[i]}, ${array2[j]}, ${array3[k]})`);
 9    }
10  }
11}

Nesse caso, você precisa calcular array1.length * array2.length * array3.length, resultando em 3 * 3 * 3 = 27 iterações para processar todas as combinações.

Otimização de loops aninhados

Ao usar loops aninhados, você pode melhorar o desempenho considerando as seguintes otimizações.

  1. Introduza saídas antecipadas: Saia do loop mais cedo quando o objetivo for alcançado para evitar iterações desnecessárias.
  2. Armazene variáveis do loop em cache: Armazene em cache os valores das variáveis usadas dentro do loop (especialmente comprimentos e intervalos) para reduzir o custo de cálculo a cada vez.
  3. Altere as estruturas de dados: Revisar a estrutura de arrays e objetos pode ser eficaz para acelerar processos repetitivos específicos.

Conclusão

Loops aninhados são uma ferramenta poderosa no processamento de dados complexos e algoritmos. No entanto, à medida que a profundidade do loop e o número de iterações aumentam, podem surgir problemas de desempenho. Com otimizações apropriadas e um design cuidadoso, você pode usar eficazmente loops aninhados no TypeScript.

Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.

YouTube Video