Het If-Statement en Beslissingen

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?

Het if-statement

Het 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:

  1. Wordt gecontroleerd of leeftijd groter of gelijk is aan 18.
  2. Omdat 18 gelijk is aan 18, is de voorwaarde true.
  3. De tekst “Je bent volwassen.” wordt naar de console geschreven.

Codeblokken { }

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.

Het if-else-statement

Vaak 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.

Vergelijkingsoperatoren

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?)

Veelgemaakte Fout: Toewijzing in plaats van Vergelijking

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.
{
    // ...
}

Logische Operatoren

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!");
}

Combineren van Logische Operatoren

Je kunt logische operatoren ook combineren om complexere voorwaarden te maken. Dit lijkt misschien lastig, maar je kunt het vergelijken met alledaagse situaties.

Analogieën

Volgorde van bewerkingen (Precedence)

Net zoals bij wiskunde (waar vermenigvuldigen voor optellen gaat), is er ook een volgorde bij logische operatoren:

  1. ! (NIET) - Hoogste prioriteit
  2. && (EN)
  3. || (OF) - Laagste prioriteit

Voorbeeld: 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:

  1. Eerst ziet hij &&. Die gaat voor ||. Dus hij berekent eerst b && c.
    • false && false is false.
  2. De expressie is nu versimpeld tot: a || false.
  3. true || false is true.
  4. Het eindresultaat is dus true.

Gebruik haakjes!

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

  1. Nu moet eerst (a || b) berekend worden.
    • true || false is true.
  2. De expressie is nu: true && c.
  3. true && false is false.
  4. Het eindresultaat is nu false!

Door haakjes te gebruiken maak je je code niet alleen veiliger, maar ook veel leesbaarder voor anderen (en jezelf).