Istruzioni di Ripetizione TypeScript
Questo articolo spiega le istruzioni di ripetizione in TypeScript.
YouTube Video
L'istruzione for
in TypeScript
L'istruzione for
in TypeScript è una struttura base per eseguire operazioni ripetute. In un ciclo for
, lo stesso blocco di codice può essere eseguito ripetutamente in base a un numero specifico di volte o a determinate condizioni.
Sintassi di Base
1for (initialization; condition; update) {
2 // Code to execute repeatedly while the condition is true
3}
-
- Si'. Questa è la parte che viene eseguita solo una volta prima di iniziare il loop. Inizializzare variabili come contatori a ciclo.
- Condizioni (condizione): Determina se il ciclo continua. Se è vero, continuare a loop, e se falso, uscire.
- Revisione: Eseguire alla fine di ogni ciclo e aggiornare il contatore del loop.
Esempio 1: Ciclo for
di base
Nell'esempio qui sotto, stampa in ordine i numeri da 0
a 4
.
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
Esempio 2: Ciclo for
con un array
Puoi anche utilizzare un ciclo for
per elaborare in ordine gli elementi di un array.
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
Esempio 3: Ciclo for-in
Il ciclo for-in
viene utilizzato per iterare sulle proprietà di un oggetto o sugli indici di un array in ordine.
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
Esempio 4: Ciclo for-of
Il ciclo for-of
viene utilizzato per ottenere il valore di ciascun elemento in ordine da oggetti iterabili come array o stringhe.
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
Esempio 5: Ciclo for
annidato
È anche possibile utilizzare un ciclo for
all'interno di un altro ciclo for
, noto come ciclo annidato. Questo ti consente, tra le altre cose, di creare cicli doppi.
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
Riepilogo
- La dichiarazione
for
esegue elaborazioni ripetitive basate su conteggi o condizioni specificate. for-in
viene utilizzato per recuperare le proprietà di un oggetto o gli indici di un array.for-of
recupera i valori degli elementi da oggetti iterabili come gli array.- È possibile eseguire elaborazioni ripetitive complesse anche con cicli
for
annidati.
L'istruzione for
in TypeScript fornisce un'elaborazione ripetitiva potente e flessibile, simile ad altri tipi di cicli.
Istruzioni while
in TypeScript
In TypeScript, un'istruzione while
è una struttura di ciclo che esegue un processo ripetitivo finché la condizione specificata è true
. Simile al ciclo for
, il ciclo while
è adatto per casi in cui il numero di iterazioni non è predeterminato o quando si desidera controllare la ripetizione in base a una condizione.
Sintassi di Base
1while (condition) {
2 // Code to execute repeatedly while the condition is true
3}
- Condizione: La condizione sotto cui il ciclo viene eseguito. Il ciclo continua finché questa condizione è
true
e si interrompe quando diventafalse
.
Esempio 1: Ciclo while
di base
Nell'esempio seguente, continua a visualizzare il valore di i
finché i
è minore di 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
In questo esempio, il ciclo termina quando i
diventa 5 o maggiore perché la condizione diventa false
.
Esempio 2: Esempio di ciclo infinito
Se la condizione in un ciclo while
è sempre true
, può diventare un ciclo infinito. Questo di solito provoca l'incapacità del programma di interrompersi come previsto, quindi è necessaria attenzione.
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
Puoi usare l'istruzione break
per uscire forzatamente dal ciclo quando una condizione viene soddisfatta.
Esempio 3: Ciclo do-while
Il ciclo do-while
è una struttura in cui il processo del ciclo viene eseguito almeno una volta. Poiché la condizione viene valutata dopo il processo, il processo viene eseguito almeno una volta anche se la condizione è 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
In questo esempio, j
è 5
dall'inizio e j < 5
è false
, ma in un ciclo do-while
, viene eseguito almeno una volta indipendentemente dalla condizione.
Riepilogo
- Un ciclo
while
ripete il processo finché la condizione ètrue
. - Se la condizione di terminazione del ciclo non è chiara, è necessario prestare attenzione ai cicli infiniti.
- Un ciclo
do-while
si differenzia da un normale ciclowhile
perché il processo viene eseguito almeno una volta.
L'istruzione while
in TypeScript è utile per processi ciclici con un numero di iterazioni incerto o quando è necessaria una verifica dinamica delle condizioni.
break
e continue
Puoi usare break
e continue
all'interno dei cicli.
break
viene utilizzato per terminare prematuramente un ciclo.continue
viene utilizzato per saltare l'iterazione corrente e passare a quella successiva.
Esempio di 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
In questo caso, break
viene eseguito quando i
diventa 5. Di conseguenza, vengono visualizzati i numeri da 0
a 4
.
Esempio di 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
In questo caso, continue
viene eseguito quando i
è 2
. Di conseguenza, vengono visualizzati tutti i numeri tranne 2
.
Cicli annidati in TypeScript
Un ciclo annidato è una struttura in cui viene utilizzato un ciclo all'interno di un altro ciclo. In TypeScript sono supportati costrutti di ciclo come for
, while
e do-while
. Utilizzando cicli annidati, è possibile elaborare array bidimensionali (matrici) e semplificare l'elaborazione basata su più condizioni.
Sintassi di Base
La sintassi di base di un ciclo annidato è la seguente.
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}
Per ogni esecuzione del ciclo esterno, il ciclo interno completa tutte le sue iterazioni. Questa struttura è molto utile quando si gestiscono più cicli o strutture dati.
Esempio di un ciclo annidato in TypeScript
Attraversare un array bidimensionale
I cicli annidati sono spesso utilizzati per manipolare strutture dati multidimensionali come gli array bidimensionali. Nel seguente esempio, gli elementi di un array bidimensionale vengono attraversati e i loro valori vengono visualizzati nella 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
In questo esempio, stiamo attraversando l'array bidimensionale matrix
. Il ciclo esterno gestisce le righe, mentre il ciclo interno gestisce le colonne, visualizzando ogni elemento in ordine.
Combinazione di due array
Successivamente, introduciamo un esempio per calcolare tutte le combinazioni di due array. Ad esempio, puoi prendere un elemento da ciascuno dei due array e generare tutte le coppie possibili.
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)
In questo esempio, vengono create tutte le coppie tra l'array di stringhe array1
e l'array di numeri array2
. Il ciclo esterno estrae elementi da array1
, mentre il ciclo interno estrae elementi da array2
, mostrando ogni coppia.
Generazione di coordinate con un ciclo triplo
Utilizzando cicli nidificati tripli, puoi generare, ad esempio, coordinate in uno spazio tridimensionale.
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)
In questo modo, l'utilizzo di cicli nidificati tripli consente di generare facilmente coordinate in uno spazio tridimensionale.
Prestazioni dei cicli nidificati
I cicli nidificati sono pratici, ma il costo computazionale aumenta rapidamente all'aumentare della profondità dei cicli. Ad esempio, se ci sono n
iterazioni del ciclo esterno e m
iterazioni del ciclo interno, il numero totale di iterazioni sarà n * m
. Quando si aggiungono ulteriori nidificazioni, la complessità computazionale aumenta esponenzialmente, influenzando potenzialmente le prestazioni del programma.
Di seguito sono riportate le complessità computazionali quando si attraversano tre array.
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}
In questo caso, è necessario calcolare array1.length * array2.length * array3.length
, risultando in 3 * 3 * 3 = 27
iterazioni per elaborare tutte le combinazioni.
Ottimizzazione dei cicli nidificati
Quando utilizzi cicli nidificati, puoi migliorare le prestazioni considerando le seguenti ottimizzazioni.
- Introdurre ritorni anticipati: Esci dal ciclo quando l'obiettivo è stato raggiunto per evitare iterazioni inutili.
- Memorizzare in cache le variabili dei cicli: Memorizza in cache i valori delle variabili usate all'interno del ciclo (specialmente lunghezze e intervalli) per ridurre il costo del calcolo ad ogni iterazione.
- Modificare le strutture dati: Rivedere la struttura degli array e degli oggetti può essere efficace per velocizzare specifici processi ripetitivi.
Conclusione
I cicli nidificati sono uno strumento potente per l'elaborazione complessa dei dati e degli algoritmi. Tuttavia, all'aumentare della profondità dei cicli e del numero di iterazioni, potrebbero sorgere problemi di prestazioni. Con ottimizzazioni appropriate e una progettazione attenta, puoi sfruttare efficacemente i cicli nidificati in TypeScript.
Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.