Visual Basic/Herhalingsinstructies
Inleiding herhalingsinstructies
[bewerken]Soms moet een deel van het programma een aantal keren herhaald worden. Stel je voor dat je slagroom klopt. In de instructie kan staan:
klop de slagroom totdat deze stijf is
In de taal van Visual Basic wordt dit:
Do While slagroom niet stijf klop slagroom Loop
of:
Do Until slagroom stijf is klop slagroom Loop
Zoals je ziet zit de herhaling in Visual Basic iets anders in elkaar dan in het normale spraakgebruik. Ook kent Visual Basic diverse vormen van herhaling:
- For / Next
- Do While / Loop
- Do Until / Loop
- While / End While
- For Each / Next
De laatste vorm is bedoeld voor collecties en arrays en zal bij die onderwerpen behandeld worden.
For / Next
[bewerken]De structuur van For / Next is:
For teller = begin To einde [ Step stap ] [ instructies ] [ Exit For ] [ instructies ] Next [ teller ]
De vermelding van teller na Next is alleen voor de duidelijkheid voor de programmeur, het maakt geen verschil in het programma. Door het vermelding is duidelijker welke Next bij welke For hoort.
De constructie For / Next wordt gebruikt om een aantal instructies een bepaald aantal keren te herhalen. Dit aantal wordt bepaald met behulp van een variabele in de For / Next-instructie, aangevuld met een beneden- en bovengrens. Bijvoorbeeld:
For teller = 1 to 4 Console.WriteLine(teller "* " teller " = " teller * teller) Next
Het resultaat is:
1 * 1 = 1 2 * 2 = 4 3 * 3 = 9 4 * 4 = 16
Hierbij is teller de gebruikte variabele, 1 de benedengrens en 4 de bovengrens. De gebruikte variabele hoeft niet apart gedeclareerd te worden. Bij de For-instructie krijgt teller de waarde 1, en als Next wordt bereikt, wordt teller verhoogd met 1 en teruggesprongen naar de eerste instructie na For, totdat teller groter wordt dan de bovengrens. De variabele teller wordt ook wel lusvariabele genoemd. Vaak wordt als naam van de lusvariabele de letters i, j en k gebruikt.
De benedengrens kan vrij gekozen worden, dus de volgende constructie is ook mogelijk:
For i = 10 to 12 ... Next
Het is ook mogelijk om de lusvariabele niet met 1, maar met een andere waarde te verhogen, bijvoorbeeld:
For i = 10 to 20 Step 5 Console.WriteLine(i) Next
Het resultaat is:
10 15 20
Je kunt ook omlaag tellen door achter Step een negatieve waarde op te geven, omdat de waarde achter Step wordt opgeteld bij de lusvariabele. Je moet er dan wel voor zorgen dat de beginwaarde groter is dan de eindwaarde, bijvoorbeeld:
For i = 6 to -3 Step -3 Console.WriteLine(i) Next <pre> Het resultaat is: <pre> 6 3 0 -3
De waarde achter Step hoeft geen geheel getal ze zijn, bijvoorbeeld:
For i = 4.5 to7 step 0.25 ' instructies Next
Zoals je ziet is deze constructie vooral handig als je de beginwaarde, de eindwaarde en de stapgrootte kent. Maar dat is niet altijd zo, daarvoor zijn de andere herhalingsinstructies bedoeld.
Do While / Loop
[bewerken]De structuur van Do While / Loop is:
Do While voorwaarde [ instructies ] [ Exit Do ] [ instructies ] Loop
Deze constructie voert een herhaling uit zolang een bepaalde voorwaarde True is. Deze voorwaarde kan zowel aan het begin als aan het eind staan. Het verschil is dat in de tweede situatie (aan het eind) de herhaling altijd één keer wordt uitgevoerd. Bij de voorwaarde aan het begin kan het voorkomen dat de herhaling helemaal niet wordt uitgevoerd. In tegenstelling tot For / Next dien je hier zelf de lusvariabele aan te passen.
Voorbeeld met de voorwaarde aan het begin:
Dim teller = 0 Do While teller < 5 Console.WriteLine(teller) teller = teller + 1 Loop
Voorbeeld met de voorwaarde aan het eind:
Dim teller = 0 Do Console.WriteLine(teller) teller = teller + 1 Loop Until teller > 4
Zoals je ziet wordt de waarde van teller in het eerste voorbeeld vergeleken met 5, en in het tweede voorbeeld met 4. Het resultaat van beide voorbeelden is hetzelfde: de reeks getallen van 0 t/m 4. Het is goed hierop te letten.
Let wel goed op: als de lusvariabele niet of niet goed wordt aangepast, zal de herhaling nooit eindigen en blijft het programma hangen.
Er bestaat nog een variant van Do While / Loop. Het formaat is:
While conditie ' instructies End While
Do Until / Loop
[bewerken]De structuur van Do Until / Loop is:
Do Until voorwaarde [ instructies ] [ Exit Do ] [ instructies ] Loop
In tegenstelling tot Do While, die wordt uitgevoerd zolang een voorwaarde True is, wordt de Do Until uitgevoerd totdat de voorwaarde False is. Een voorbeeld:
Dim teller = 10 Do Until teller <= 0 Console.WriteLine(teller) teller = teller - 2 Loop
Let op: hier wordt gekeken of de lusvariabele gelijk aan of kleiner is dan 0. Dit is hier belangrijk omdat de lusvariabele steeds met 2 verlaagd wordt. Stel dat er stond = 0 en teller initieel op 9 was gezet, dan zou nooit aan de voorwaarde worden voldaan, omdat de lusvariabele nooit 0 kan worden. Een goede programmeur let op al deze bijzonderheden.
Exit For en Exit Do
[bewerken]Met Exit For en Exit Do kun je voortijdig een herhaling verlaten. Het programma gaat dan verder met de instructie na Next of Loop.
For i = 1 to 20 ... If voorwaarde Then Exit For End If ... Next
Do While teller < 50 ... If voorwaarde Then Exit Do End If ... Loop
While / End While
[bewerken]De structuur van While / End While is:
While voorwaarde [ instructies ] [ Exit While ] [ instructies ] End While
Deze constructie wordt niet vaak gebruikt. Meestal wordt de voorkeur gegeven aan Do While / Loop.
Voorbeeld:
While i <= 10 Console.WriteLine(i) i = i + 1 End While
Zoals je ziet kan ook hier gebruik worden gemaakt van Exit While.
For Each / Next
[bewerken]Deze constructie wordt gebruikt om een aantal instructies te herhalen voor elk element van een array (het array wordt verderop uitgelegd). Hierbij wordt de lusvariabele gebruikt om steeds het volgende element uit een tabel te halen. De instructies worden niet uitgevoerd als het array leeg is.
Een voorbeeld:
Dim kleuren() As String = {"rood", "geel", "blauw", "groen"} For Each kleur As String in kleuren Console.WriteLine(kleur) Next
Het resultaat is:
rood geel blauw groen
For / Each kan ook gebruikt worden bij collecties. Deze worden later behandeld.