TypeScript Herhalingsuitspraken
Dit artikel legt de herhalingsuitspraken in TypeScript uit.
YouTube Video
De for
-instructie in TypeScript
De for
-instructie in TypeScript is een basislusstructuur voor het uitvoeren van herhaalde bewerkingen. In een for
-lus kan hetzelfde codeblok herhaaldelijk worden uitgevoerd op basis van een opgegeven aantal keren of voorwaarden.
Basis Syntax
1for (initialization; condition; update) {
2 // Code to execute repeatedly while the condition is true
3}
- Initialisatie (
initialisatie
): Het deel dat slechts één keer wordt uitgevoerd voordat de lus begint. Initialiseer variabelen zoals de lussteller. - Voorwaarde (
voorwaarde
): De voorwaarde die bepaalt of de lus doorgaat. Alswaar
, gaat de lus door; alsonwaar
, eindigt deze. - Update (
bijwerken
): Dit wordt uitgevoerd aan het einde van elke lus om de lussteller bij te werken.
Voorbeeld 1: Basis for
-lus
In het onderstaande voorbeeld geeft het de getallen van 0
tot 4
in volgorde weer.
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
Voorbeeld 2: for
-lus met een array
Je kunt ook een for
-lus gebruiken om de elementen van een array in volgorde te verwerken.
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
Voorbeeld 3: for-in
-lus
De for-in
-lus wordt gebruikt om door de eigenschappen van een object of de indices van een array te itereren in volgorde.
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
Voorbeeld 4: for-of
-lus
De for-of
-lus wordt gebruikt om de waarden van elementen achtereenvolgens op te halen uit iterabele objecten zoals arrays of 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
Voorbeeld 5: Geneste for
-lus
Het is ook mogelijk om een for
-lus binnen een andere for
-lus te gebruiken, wat een geneste lus wordt genoemd. Hiermee kun je onder andere dubbele lussen creëren.
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
Samenvatting
- De
for
-instructie voert herhaaldelijke bewerkingen uit op basis van opgegeven aantallen of voorwaarden. for-in
wordt gebruikt om de eigenschappen van een object of de indexen van een array op te halen.for-of
haalt de waarden op van elementen uit itereerbare objecten zoals arrays.- Complexe herhaalde bewerkingen zijn ook mogelijk met geneste
for
-lussen.
De for
-verklaring in TypeScript biedt krachtige en flexibele herhalende verwerking, vergelijkbaar met andere lussen.
While
-verklaringen in TypeScript
In TypeScript is een while
-verklaring een lusconstructie die een herhalend proces uitvoert zolang de opgegeven voorwaarde true
is. Net als de for
-lus is de while
-lus geschikt voor situaties waarin het aantal herhalingen niet vooraf bepaald is, of wanneer je herhaling wilt regelen op basis van een voorwaarde.
Basis Syntax
1while (condition) {
2 // Code to execute repeatedly while the condition is true
3}
- Voorwaarde: De voorwaarde waaronder de lus wordt uitgevoerd. De lus gaat door zolang deze voorwaarde
true
is en stopt wanneer dezefalse
wordt.
Voorbeeld 1: Basis while
-lus
In het onderstaande voorbeeld blijft het de waarde van i
weergeven zolang i
minder is dan 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 dit voorbeeld eindigt de lus wanneer i
5 of meer wordt, omdat de voorwaarde false
wordt.
Voorbeeld 2: Voorbeeld van een oneindige lus
Als de voorwaarde in een while
-lus altijd true
is, kan het een oneindige lus worden. Dit zorgt er meestal voor dat het programma niet stopt zoals bedoeld, dus voorzichtigheid is geboden.
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
Je kunt de break
-verklaring gebruiken om de lus voortijdig af te breken wanneer aan een voorwaarde wordt voldaan.
Voorbeeld 3: do-while
-lus
De do-while
-lus is een structuur waarbij het lusproces minstens één keer wordt uitgevoerd. Omdat de voorwaarde na het proces wordt geëvalueerd, wordt het proces minstens één keer uitgevoerd, zelfs als de voorwaarde false
is.
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 dit voorbeeld is j
vanaf het begin 5
en is j < 5
false
, maar in een do-while
-lus wordt deze minstens één keer uitgevoerd, ongeacht de voorwaarde.
Samenvatting
- Een
while
-lus herhaalt de verwerking zolang de voorwaardetrue
is. - Als de beëindigingsvoorwaarde van de lus onduidelijk is, moet je oppassen voor oneindige lussen.
- Een
do-while
-lus verschilt van een normalewhile
-lus doordat de verwerking minstens één keer wordt uitgevoerd.
De while
-verklaring in TypeScript is nuttig voor lusverwerking met een onzeker aantal herhalingen of wanneer dynamische voorwaardelijke controles nodig zijn.
break
en continue
Je kunt break
en continue
binnen lussen gebruiken.
break
wordt gebruikt om een lus voortijdig te beëindigen.continue
wordt gebruikt om de huidige iteratie over te slaan en door te gaan naar de volgende iteratie.
Voorbeeld van 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;
10while (i < 10) {
11 if (i === 5) {
12 break; // Ends the loop when i is 5
13 }
14 console.log(i);
15 i++;
16}
17// Outputs 0, 1, 2, 3, 4
In dit geval wordt break
uitgevoerd wanneer i
gelijk is aan 5. Als resultaat worden de nummers van 0
tot 4
weergegeven.
Voorbeeld van 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;
10while (i < 5) {
11 if (i === 2) {
12 i++;
13 continue; // Skips when i is 2
14 }
15 console.log(i);
16 i++;
17}
18// Outputs 0, 1, 3, 4
In dit geval wordt continue
uitgevoerd wanneer i
gelijk is aan 2
. Als resultaat worden alle nummers behalve 2
weergegeven.
Geneste lussen in TypeScript
Een geneste lus is een structuur waarbij een lus binnen een andere lus wordt gebruikt. In TypeScript worden loopconstructies zoals for
, while
en do-while
ondersteund. Door geneste lussen te gebruiken, kun je tweedimensionale arrays (matrices) verwerken en de verwerking vereenvoudigen op basis van meerdere voorwaarden.
Basis Syntax
De basis syntaxis van een geneste lus is als volgt.
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}
Voor elke uitvoering van de buitenste lus voltooit de binnenste lus al zijn iteraties. Deze structuur is erg nuttig bij het werken met meerdere lussen of datastructuren.
Voorbeeld van een geneste lus in TypeScript
Doorlopen van een tweedimensionale array
Geneste lussen worden vaak gebruikt bij het manipuleren van multidimensionale datastructuren zoals tweedimensionale arrays. In het volgende voorbeeld worden de elementen van een tweedimensionale array doorlopen en worden hun waarden weergegeven op de 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 dit voorbeeld doorlopen we de tweedimensionale array matrix
. De buitenste lus behandelt de rijen en de binnenste lus behandelt de kolommen, waarbij elk element op volgorde wordt weergegeven.
Combinatie van twee arrays
Vervolgens introduceren we een voorbeeld voor het berekenen van alle combinaties van twee arrays. Bijvoorbeeld: u kunt één element uit elk van de twee arrays nemen en alle mogelijke paren weergeven.
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 dit voorbeeld worden alle paren tussen de stringarray array1
en de nummerarray array2
gemaakt. De buitenste lus haalt elementen uit array1
en de binnenste lus haalt elementen uit array2
, waarbij elk paar wordt weergegeven.
Coördinaten genereren met een drievoudige lus
Door drievoudig geneste lussen te gebruiken, kunt u bijvoorbeeld coördinaten genereren in een driedimensionale ruimte.
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)
Op deze manier kunt u met drievoudig geneste lussen eenvoudig coördinaten genereren in een driedimensionale ruimte.
Prestatie van geneste lussen
Geneste lussen zijn handig, maar de rekenkosten nemen snel toe naarmate de diepte van de lussen toeneemt. Bijvoorbeeld: als er n
iteraties van de buitenste lus zijn en m
iteraties van de binnenste lus, is het totale aantal iteraties n * m
. Wanneer dit verder wordt genest, neemt de rekencapaciteit exponentieel toe, wat mogelijk invloed heeft op de programmavoorstelling.
Hieronder staan de rekenkundige complexiteiten bij het doorlopen van drie 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}
In dit geval loopt de lus een aantal keren gelijk aan het product van de lengtes van.
Optimalisatie van geneste lussen
Bij het gebruik van geneste lussen kunt u de prestaties verbeteren door de volgende optimalisaties in overweging te nemen.
- Introduceer vroege returns: Verlaat de lus vroegtijdig wanneer het doel is bereikt om onnodige iteraties te vermijden.
- Cache-lusvariabelen: Cache van tevoren de waarden van variabelen die in de lus worden gebruikt (vooral lengtes en bereiken) om de rekenkosten elke keer te verminderen.
- Wijzig datastructuren: Het herzien van de structuur van arrays en objecten kan effectief zijn bij het versnellen van specifieke repetitieve processen.
Conclusie
Geneste lussen zijn een krachtig hulpmiddel bij complexe gegevensverwerking en algoritmen. Echter, naarmate de luspdiepte en het aantal iteraties toenemen, kunnen prestatieproblemen optreden. Met geschikte optimalisaties en zorgvuldig ontwerp kunt u geneste lussen effectief benutten in TypeScript.
Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.