Meervoudige Selectie en Scope

Soms zijn er meer dan twee mogelijkheden. Je wilt niet alleen checken of iets “waar” of “niet waar” is, maar je hebt meerdere opties. Hiervoor gebruiken we else if.

De if-else if-else ladder

Je kunt meerdere voorwaarden achter elkaar ketenen. Het programma controleert ze van boven naar beneden. Zodra één voorwaarde true is, wordt dat blok uitgevoerd en worden de overige blokken overgeslagen.

int score = 75;

if (score >= 90)
{
    Console.WriteLine("Geweldig! Een A.");
}
else if (score >= 80)
{
    Console.WriteLine("Goed gedaan! Een B.");
}
else if (score >= 70)
{
    Console.WriteLine("Voldoende. Een C.");
}
else
{
    Console.WriteLine("Helaas, onvoldoende.");
}

Belangrijk: De volgorde maakt uit! Als we eerst if (score >= 70) hadden gezet, zou een score van 95 ook in dat blok vallen, en zouden we nooit “Geweldig!” zien.

Scope van variabelen (Levensduur)

Variabelen die je binnen een codeblok { ... } aanmaakt, bestaan alleen binnen dat blok. Dit noemen we de scope van de variabele.

if (true)
{
    int geheimGetal = 42;
    Console.WriteLine(geheimGetal); // Dit werkt
}

// Console.WriteLine(geheimGetal); // FOUT! geheimGetal bestaat hier niet meer.

Als je een variabele in meerdere blokken wilt gebruiken, moet je hem buiten (boven) de if-structuur declareren.

string bericht; // Declaratie buiten de blokken

if (score > 50)
{
    bericht = "Geslaagd";
}
else
{
    bericht = "Gezakt";
}

Console.WriteLine(bericht); // Dit werkt nu wel

Geneste If-statements

Je kunt een if-statement ook in een ander if-statement plaatsen. Dit heet “nesting”. Hoewel dit soms nodig is, maakt het je code vaak moeilijker leesbaar. Probeer waar mogelijk else if of logische operatoren (&&) te gebruiken.

if (weer == "zonnig")
{
    if (temperatuur > 25)
    {
        Console.WriteLine("Naar het strand!");
    }
    else
    {
        Console.WriteLine("Wandelen in het park.");
    }
}

Veelgemaakte Fouten

1. Onbereikbare Code (Unreachable Code)

De volgorde van je else if statements is cruciaal.

int getal = 15;

if (getal > 5)
{
    Console.WriteLine("Groter dan 5");
}
else if (getal > 10)
{
    Console.WriteLine("Groter dan 10");
}

Als getal 15 is, is het groter dan 5. Het eerste blok wordt uitgevoerd. Het tweede blok (> 10) wordt nooit gecontroleerd, ook al is 15 ook groter dan 10. Tip: Zet de meest specifieke voorwaarde altijd bovenaan.

2. Vergeten else

Soms vergeet je een vangnet voor als geen enkele voorwaarde waar is.

string stoplicht = "blauw";

if (stoplicht == "rood") { ... }
else if (stoplicht == "oranje") { ... }
else if (stoplicht == "groen") { ... }

Als het stoplicht “blauw” is (wat niet zou moeten kunnen, maar toch), gebeurt er nu niets. Een else blok met een foutmelding is dan handig.