In dit hoofdstuk leren we hoe we onze programma’s slimme keuzes kunnen laten maken. Tot nu toe voerden onze programma’s instructies regel voor regel uit, van boven naar beneden. Maar wat als we bepaalde code alleen willen uitvoeren als aan een bepaalde voorwaarde is voldaan?
if-statementHet meest basische beslissingsstructuur is het if-statement. Het controleert een voorwaarde (een expressie die true of false is). Als de voorwaarde true is, wordt het blok code uitgevoerd.
int leeftijd = 18;
if (leeftijd >= 18)
{
Console.WriteLine("Je bent volwassen.");
}
In dit voorbeeld:
leeftijd groter of gelijk is aan 18.true.{ }De accolades { } geven aan welke code bij het if-statement hoort. Als je maar één regel code hebt, mag je de accolades weglaten, maar het is goede gewoonte om ze altijd te gebruiken. Dit voorkomt fouten als je later meer regels toevoegt.
if-else-statementVaak wil je iets doen als de voorwaarde waar is, maar iets anders als de voorwaarde niet waar is. Hiervoor gebruiken we else.
int score = 45;
if (score >= 50)
{
Console.WriteLine("Geslaagd!");
}
else
{
Console.WriteLine("Helaas, niet geslaagd.");
}
Hier wordt “Helaas, niet geslaagd.” afgedrukt omdat 45 niet groter of gelijk is aan 50.
Om voorwaarden te maken, gebruiken we vergelijkingsoperatoren:
| Operator | Betekenis | Voorbeeld |
|---|---|---|
== |
Gelijk aan | a == b |
!= |
Niet gelijk aan | a != b |
> |
Groter dan | a > b |
< |
Kleiner dan | a < b |
>= |
Groter of gelijk aan | a >= b |
<= |
Kleiner of gelijk aan | a <= b |
Let op het verschil tussen
=(toewijzing) en==(vergelijking)!
int a = 5;(Maak a gelijk aan 5)if (a == 5)(Is a gelijk aan 5?)
Een veelgemaakte fout bij beginners is het gebruik van = in plaats van == in een if-statement.
Fout:
int score = 10;
if (score = 20) // FOUT! Dit probeert 20 toe te wijzen aan score. Omdat de toewijzing lukt, is de voorwaarde altijd waar en zal de code altijd uitgevoerd worden.
{
// ...
}
In C# geeft dit gelukkig vaak een foutmelding (omdat een getal niet zomaar true of false is), maar in andere talen kan dit tot lastige bugs leiden.
Correct:
int score = 10;
if (score == 20) // CORRECT! Dit vergelijkt score met 20.
{
// ...
}
Je kunt ook meerdere voorwaarden combineren:
| Operator | Naam | Betekenis |
|---|---|---|
&& |
AND (EN) | Beide voorwaarden moeten waar zijn |
\|\| |
OR (OF) | Minstens één van de voorwaarden moet waar zijn |
! |
NOT (NIET) | Draait de waarde om (true wordt false, false wordt true) |
int uur = 14;
bool isWeekend = true;
if (uur > 12 && isWeekend)
{
Console.WriteLine("Het is namiddag in het weekend!");
}
Je kunt logische operatoren ook combineren om complexere voorwaarden te maken. Dit lijkt misschien lastig, maar je kunt het vergelijken met alledaagse situaties.
&&): Denk aan het inloggen op een website. Je moet EN je gebruikersnaam weten EN je wachtwoord. Als één van de twee fout is, kom je er niet in.||): Denk aan betalen in een winkel. Je mag met cash betalen OF met een kaart. Als één van de twee lukt, is de betaling geslaagd.Net zoals bij wiskunde (waar vermenigvuldigen voor optellen gaat), is er ook een volgorde bij logische operatoren:
! (NIET) - Hoogste prioriteit&& (EN)|| (OF) - Laagste prioriteitVoorbeeld: Stel we hebben deze variabelen:
bool a = true;
bool b = false;
bool c = false;
En we evalueren deze expressie:
a || b && c
De computer leest dit als volgt:
&&. Die gaat voor ||. Dus hij berekent eerst b && c.
false && false is false.a || false.true || false is true.Vind je die regels verwarrend? Dat is heel normaal! Daarom is het sterk aanbevolen om altijd haakjes () te gebruiken als je twijfelt of als je de volgorde wilt veranderen. Haakjes gaan altijd voor.
Kijk wat er gebeurt als we haakjes toevoegen:
(a || b) && c
(a || b) berekend worden.
true || false is true.true && c.true && false is false.Door haakjes te gebruiken maak je je code niet alleen veiliger, maar ook veel leesbaarder voor anderen (en jezelf).