Declaraciones de repetición en TypeScript

Declaraciones de repetición en TypeScript

Este artículo explica las declaraciones de repetición en TypeScript.

YouTube Video

La declaración for en TypeScript

La declaración for en TypeScript es una estructura básica de bucle para realizar operaciones repetitivas. En un bucle for, el mismo bloque de código se puede ejecutar repetidamente basado en un número de veces o condiciones especificados.

Sintaxis Básica

1for (initialization; condition; update) {
2    // Code to execute repeatedly while the condition is true
3}
  • inicialización: Esta es la parte que se ejecuta sólo una vez antes de comenzar el bucle. Inicializar variables como contadores de bucle.
  • Conditions (condition): Determina si el bucle continúa. Si es verdad, sigue hundiendo, y si es falso, salir.
  • Actualización ( " actualización " ): Correr al final de cada bucle y actualizar el contador de bucle.

Ejemplo 1: Bucle básico for

En el ejemplo a continuación, imprime los números del 0 al 4 en orden.

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

Ejemplo 2: Bucle for con un arreglo

También puedes usar un bucle for para procesar los elementos de un arreglo en orden.

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

Ejemplo 3: Bucle for-in

El bucle for-in se usa para iterar sobre las propiedades de un objeto o los índices de un arreglo en orden.

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

Ejemplo 4: Bucle for-of

El bucle for-of se usa para obtener el valor de cada elemento en orden de objetos iterables como arreglos o cadenas.

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

Ejemplo 5: Bucle for Anidado

También es posible usar un bucle for dentro de otro bucle for, conocido como bucle anidado. Esto te permite crear bucles dobles, entre otras cosas.

 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

Resumen

  • La declaración for realiza un procesamiento repetitivo basado en recuentos o condiciones especificados.
  • for-in se usa para recuperar las propiedades de un objeto o los índices de un arreglo.
  • for-of recupera los valores de los elementos de objetos iterables como arreglos.
  • El procesamiento repetitivo complejo también es posible con bucles for anidados.

La declaración for en TypeScript proporciona un procesamiento repetitivo poderoso y flexible, similar a otros bucles.

Declaraciones While en TypeScript

En TypeScript, una declaración while es una construcción de bucle que ejecuta un proceso repetitivo mientras la condición especificada es true. Similar al bucle for, el bucle while es adecuado para casos en los que el número de iteraciones no está predeterminado o cuando deseas controlar la repetición basada en una condición.

Sintaxis Básica

1while (condition) {
2    // Code to execute repeatedly while the condition is true
3}
  • Condición: La condición bajo la cual se ejecuta el bucle. El bucle continúa mientras esta condición sea true, y se detiene cuando se vuelve false.

Ejemplo 1: Bucle básico while

En el ejemplo a continuación, continúa imprimiendo el valor de i mientras i sea 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

En este ejemplo, el bucle termina cuando i alcanza 5 o más porque la condición se vuelve false.

Ejemplo 2: Ejemplo de bucle infinito

Si la condición en un bucle while siempre es true, puede convertirse en un bucle infinito. Esto generalmente hace que el programa no se detenga como se esperaba, por lo que se necesita precaución.

 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

Puedes usar la declaración break para salir del bucle forzosamente cuando se cumple una condición.

Ejemplo 3: Bucle do-while

El bucle do-while es una estructura en la que el proceso del bucle se ejecuta al menos una vez. Dado que la condición se evalúa después del proceso, el proceso se ejecuta al menos una vez incluso si la condición es 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

En este ejemplo, j es 5 desde el inicio, y j < 5 es false, pero en un bucle do-while, se ejecuta al menos una vez independientemente de la condición.

Resumen

  • Un bucle while repite el procesamiento mientras la condición sea true.
  • Si la condición de finalización del bucle no está clara, debes tener cuidado con los bucles infinitos.
  • Un bucle do-while se diferencia de un bucle while normal en que el procesamiento se ejecuta al menos una vez.

La declaración while en TypeScript es útil para el procesamiento de bucles con un número de iteraciones incierto o cuando es necesario verificar condiciones dinámicas.

break y continue

Puedes usar break y continue dentro de los bucles.

  • break se usa para finalizar un bucle prematuramente.
  • continue se usa para omitir la iteración actual y pasar a la siguiente iteración.

Ejemplo 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

En este caso, break se ejecuta cuando i vale 5. Como resultado, se muestran los números del 0 al 4.

Ejemplo 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

En este caso, continue se ejecuta cuando i es 2. Como resultado, se muestran los números excepto el 2.

Bucles anidados en TypeScript

Un bucle anidado es una estructura donde un bucle se utiliza dentro de otro bucle. En TypeScript, se admiten construcciones de bucles como for, while y do-while. Mediante el uso de bucles anidados, puedes procesar matrices bidimensionales y optimizar el procesamiento basado en múltiples condiciones.

Sintaxis Básica

La sintaxis básica de un bucle anidado es la siguiente.

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}

Por cada ejecución del bucle exterior, el bucle interior completa todas sus iteraciones. Esta estructura es muy útil al manejar múltiples bucles o estructuras de datos.

Ejemplo de un bucle anidado en TypeScript

Recorriendo una matriz bidimensional

Los bucles anidados se usan a menudo al manipular estructuras de datos multidimensionales como matrices bidimensionales. En el siguiente ejemplo, se recorren los elementos de una matriz bidimensional y sus valores se muestran en la consola.

 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

En este ejemplo, estamos recorriendo el arreglo bidimensional matrix. El bucle externo gestiona las filas y el bucle interno gestiona las columnas, mostrando cada elemento en orden.

Combinación de dos arreglos

A continuación, presentamos un ejemplo de cómo calcular todas las combinaciones de dos arreglos. Por ejemplo, puedes tomar un elemento de cada uno de los dos arreglos y mostrar todos los pares posibles.

 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)

En este ejemplo, se crean todos los pares entre el arreglo de cadenas array1 y el arreglo de números array2. El bucle externo extrae elementos de array1, y el bucle interno extrae elementos de array2, mostrando cada par.

Generación de coordenadas con un triple bucle

Por ejemplo, usando bucles anidados triples, puedes generar coordenadas en un espacio tridimensional.

 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)

De esta manera, el uso de bucles anidados triples te permite generar fácilmente coordenadas en un espacio tridimensional.

Rendimiento de los bucles anidados

Los bucles anidados son convenientes, pero el costo computacional aumenta rápidamente a medida que aumenta la profundidad de los bucles. Por ejemplo, si hay n iteraciones del bucle externo y m iteraciones del bucle interno, el número total de iteraciones será n * m. Cuando esto se anida aún más, la complejidad computacional aumenta exponencialmente, lo que podría afectar el rendimiento del programa.

A continuación, se muestran las complejidades computacionales al recorrer tres arreglos.

 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}

En este caso, necesitas calcular array1.length * array2.length * array3.length, lo que da como resultado 3 * 3 * 3 = 27 iteraciones para procesar todas las combinaciones.

Optimización de bucles anidados

Al usar bucles anidados, puedes mejorar el rendimiento considerando las siguientes optimizaciones.

  1. Introducir salidas tempranas: Sal del bucle tan pronto como se alcance el objetivo para evitar iteraciones innecesarias.
  2. Guardar en caché las variables del bucle: Pre-almacena los valores de las variables usadas dentro del bucle (especialmente longitudes y rangos) para reducir el costo de cálculo en cada iteración.
  3. Cambiar las estructuras de datos: Revisar la estructura de arreglos y objetos puede ser eficaz para acelerar procesos repetitivos específicos.

Conclusión

Los bucles anidados son una herramienta poderosa en el procesamiento de datos complejos y algoritmos. Sin embargo, a medida que aumenta la profundidad del bucle y el número de iteraciones, pueden surgir problemas de rendimiento. Con optimizaciones adecuadas y un diseño cuidadoso, puedes aprovechar eficazmente los bucles anidados en TypeScript.

Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.

YouTube Video