n00b pro

04. iteraties

Dit hoofdstuk is onderdeel van de cursus C#. Andere cursussen in dezelfde reeks: HTML, CSS, Javascript, Ontwikkelomgeving.

Op Youtube

Deze video maakt deel uit van de IIP playlist van de Youtube channel van Rogier van der Linde.

Let op: deze video's zijn al een paar jaar oud, dus hier en daar kunnen kleine afwijkingen voorkomen met deze cursus, die wel altijd up-to-date is.

https://www.youtube.com/watch?v=aq0P6lPJgRs

Wat zijn iteraties

Iteratie-structuren

WHILE-iteratie

Voert instructieblok uit zolang aan een bepaalde voorwaarde wordt voldaan. Deze voorwaarde wordt eerst gecontroleerd (0 of meerdere keren herhaald).

while-flowchart

while (voorwaarde)
{
   // te herhalen instructies
}

Voorbeeld 1

Dit voorbeeld telt verder zolang het getal kleiner of gelijk aan 5 is:

int getal = 1;

while (getal <= 5)
{
   Console.WriteLine(getal);
   getal++;
}
1
2
3
4
5
resultaat in de console

Voorbeeld 2

Dit voorbeeld doet voort zolang het antwoord ja is:

string voortdoen = "ja";
while (voortdoen == "ja")
{
   Console.WriteLine($"We doen voort...");
   Console.Write("Voortdoen? ja of nee: ");
   voortdoen = Console.ReadLine();
}
Console.WriteLine("We doen niet meer voort.");
We doen voort...
Voortdoen? ja of nee: ja
We doen voort...
Voortdoen? ja of nee: ja
We doen voort...
Voortdoen? ja of nee: nee
We doen niet meer voort.
resultaat in de console

DO WHILE-iteratie

Voert instructieblok uit zolang aan een bepaalde voorwaarde wordt voldaan. Statements worden éérst uitgevoerd, nadien pas wordt voorwaarde gecontroleerd (1 of meerdere keren herhaald).

while-flowchart

do
{
   // te herhalen instructies
}
while (voorwaarde);

Voorbeeld 1

Dit voorbeeld telt verder zolang het getal kleiner of gelijk aan 5 is:

int getal = 1;

do
{
   Console.WriteLine(getal);
   getal++;
}
while (getal <= 5);
1
2
3
4
5
resultaat in de console

Voorbeeld 2

Nog een typisch voorbeeld, een raadspelletje:

int geheimGetal = 7;
Console.WriteLine("Raad een getal tussen 1 en 10");
int getal;
do
{
   Console.Write("Jouw gok: ");
   getal = Convert.ToInt32(Console.ReadLine());
}
while (getal != geheimGetal);
Console.WriteLine("Geraden");
Raad een getal tussen 1 en 10
Jouw gok: 3
Jouw gok: 6
Jouw gok: 2
Jouw gok: 7
Geraden
resultaat in de console
let op het verschil!

FOR-iteratie

Een for-iteratie bestaat uit drie delen:

for-flowchart

for (begin; voorwaarde; increment)
{
   // te herhalen instructies
}

Voorbeeld 1: oplopend tellen

for (int i = 1; i <= 5; i++)
{
   Console.WriteLine(i);
}
1
2
3
4
5
resultaat in de console

Voorbeeld 2: tellen in sprongen van 2

Het increment hoeft niet altijd met één omhoog te gaan, onderstaande lus telt met sprongen van twee:

for (int i = 1; i <=10; i+=2)
{
   Console.WriteLine(i);
}
1
3
5
7
9
resultaat in de console

Voorbeeld 3: aflopend tellen

Je kunt ook aftellen door gebruik te maken van de decrement-operator (−− of −=):

for (int i = 5; i >= 1; i−−)
{
   Console.WriteLine(i);
}
5
4
3
2
1
resultaat in de console

FOREACH-iteratie

Met een foreach-iteratie kan je door alle elementen van een collectie itereren (array's, lijsten, ListBoxItem's, ...).

Console voorbeeld: karakters van een string overlopen

Een string is een collectie van karakters (char's) en kan je dus ook overlopen d.m.v. een foreach-iteratie:

string str = "Hello!";

foreach (char letter in str)
{
   Console.WriteLine(letter);
}
H
e
l
l
o
!
resultaat in de console

WPF voorbeeld: items van een ListBox overlopen

Foreach wordt ook veel gebruikt in WPF, b.v. om de Items van een ListBox te overlopen

Flow control met continue en break

continue

Met continue kan je de huidige lus onderbreken en overslaan. Voorbeeld met een for-lus (werkt ook met andere lussen):

for (int i = 1; i <= 10; i++)
{
   if (i == 2 || i == 7) continue; // sla 2 en 7 over
   Console.WriteLine(i); 
}
1
3
4
5
6
8
9 
10
resultaat in de console

Het mag op meerdere plaatsen voorkomen. Vorig fragment herschreven:

for (int i = 1; i <= 10; i++)
{
   if (i == 2) continue; // sla 2 over
   if (i == 7) continue; // sla 7 over
   Console.WriteLine(i); 
}

In sommige gevallen kan continue je code leesbaarder maken, maar meestal is het overbodig. Vorig voorbeeld kan je bijvoorbeeld ook zo schrijven:

for (int i = 1; i <= 10; i++)
{
   if (i != 2 && i != 7) Console.WriteLine(i); 
}

break

Met break kan je de iteratie afbreken. Voorbeeld met een for:

for (int i = 1; i <= 10; i++)
{
   if (i == 7) break; // onderbreek bij 7
   Console.WriteLine(i); 
}
1
2
3
4
5
6
resultaat in de console

Voorbeeld met een while:

Random random = new Random();
while (true) // eindeloze lus 
{ 
   int worp = random.Next(1, 7);
   if (worp == 6) {
      Console.WriteLine("6 gegooid!");
      break;
   }
   Console.WriteLine($"{worp} gegooid...");
}
2 gegooid...
3 gegooid...
1 gegooid...
3 gegooid...
6 gegooid!
resultaat in de console

Het gebruik van break wordt in alle gevallen afgeraden en is verboden in deze cursus. Het getuigt van slechte programmeerstijl! Vorig fragment kan je bijvoorbeeld veel netter herschrijven als:

Random random = new Random();
int worp;
do
{
   worp = random.Next(1, 7);
   Console.WriteLine($"{worp} gegooid...");
} while (worp != 6);
Console.WriteLine("6 gegooid!");

Juiste iteratie kiezen