Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Hoofdstuk 7 — Controlestructuren (if, else, switch) voor beslissingen

Beslissingen vormen de kern van logica in je programma. Met if/else toets je voorwaarden; met switch kies je uit meerdere takken. In moderne Java (21) kun je switch ook als expressie gebruiken die een waarde oplevert.

Voorbeeld 1 — Basis if/else Introductie: Eenvoudige keuze tussen twee paden op basis van een voorwaarde.

public class IfElseBasis {
    public static void main(String[] args) {
        int score = 75;
        if (score >= 60) {
            System.out.println("Geslaagd");
        } else {
            System.out.println("Gezakt");
        }
    }
}

Toelichting: Gebruik if/else wanneer er twee mogelijke uitkomsten zijn.

Voorbeeld 2 — Meerdere if/else-if takken Introductie: Kies uit meer dan twee categorieën met else-if ketens.

public class CijferBeoordeling {
    public static void main(String[] args) {
        int score = 83;
        if (score >= 90) {
            System.out.println("Uitmuntend");
        } else if (score >= 75) {
            System.out.println("Goed");
        } else if (score >= 60) {
            System.out.println("Voldoende");
        } else {
            System.out.println("Onvoldoende");
        }
    }
}

Toelichting: Houd de voorwaarden eenvoudig; bij lange ketens kan een switch of mapping duidelijker zijn.

Voorbeeld 3 — Ingesloten if (nested) en leesbaarheid Introductie: Geneste if’s kunnen logica uitdrukken, maar kunnen snel onleesbaar worden.

public class NestedIf {
    public static void main(String[] args) {
        int leeftijd = 20;
        boolean lid = true;
        if (leeftijd >= 18) {
            if (lid) {
                System.out.println("Volwassen lid");
            } else {
                System.out.println("Volwassen geen lid");
            }
        } else {
            System.out.println("Minderjarig");
        }
    }
}

Toelichting: Overweeg vroege returns of hulpmethoden om diepe nesting te vermijden.

Voorbeeld 4 — Switch (statement) met pijl-syntaxis Introductie: Gebruik switch voor vaste, op één variabele gebaseerde keuzes.

public class SwitchStatementDemo {
    public static void main(String[] args) {
        int dag = 3;
        switch (dag) {
            case 1 -> System.out.println("Maandag");
            case 2 -> System.out.println("Dinsdag");
            case 3 -> System.out.println("Woensdag");
            case 4 -> System.out.println("Donderdag");
            case 5 -> System.out.println("Vrijdag");
            case 6, 7 -> System.out.println("Weekend");
            default -> System.out.println("Onbekend");
        }
    }
}

Toelichting: De pijl-syntaxis is kort en voorkomt fall‑through.

Voorbeeld 5 — Switch als expressie met returnwaarde Introductie: Switch kan ook een waarde opleveren die je direct kunt toewijzen.

public class SwitchExpressieDemo {
    public static void main(String[] args) {
        int maand = 2;
        int dagen = switch (maand) {
            case 1, 3, 5, 7, 8, 10, 12 -> 31;
            case 4, 6, 9, 11 -> 30;
            case 2 -> 28; // schrikkeljaren laten we hier buiten beschouwing
            default -> throw new IllegalArgumentException("Onbekende maand: " + maand);
        };
        System.out.println("Dagen: " + dagen);
    }
}

Toelichting: De default-tak is verplicht voor volledigheid; of gooi een betekenisvolle exception.

Voorbeeld 6 — yield in switch-blokken Introductie: Gebruik yield om vanuit een blok een waarde terug te geven.

public class SwitchYieldDemo {
    public static void main(String[] args) {
        String rol = "admin";
        int niveau = switch (rol) {
            case "gast" -> 0;
            case "gebruiker" -> 1;
            case "admin" -> {
                System.out.println("Extra checks...");
                yield 2; // geef waarde terug vanuit blok
            }
            default -> -1;
        };
        System.out.println(niveau);
    }
}

Toelichting: Binnen blokken kun je extra statements uitvoeren voordat je een waarde ‘yields’.

Voorbeeld 7 — Valstrik: toekennings- vs vergelijkingsoperator Introductie: Een veelgemaakte fout is = (toekennen) gebruiken i.p.v. == (vergelijken).

public class AssignVsEquals {
    public static void main(String[] args) {
        boolean vlag = false;
        // if (vlag = true) { ... } // fout: dit is toekenning
        if (vlag == true) {
            System.out.println("waar");
        } else {
            System.out.println("niet waar");
        }
    }
}

Toelichting: De compiler zou deze fout soms niet waarschuwen zonder @SuppressWarnings; voorkom het door == te gebruiken.

Voorbeeld 8 — Guard clauses (vroeg terugkeren) Introductie: Met guard clauses keer je vroeg terug en hou je methoden plat en leesbaar.

public class GuardClauses {
    static String beschrijf(int n) {
        if (n < 0) return "negatief";
        if (n == 0) return "nul";
        return "positief";
    }
    public static void main(String[] args) {
        System.out.println(beschrijf(-5));
        System.out.println(beschrijf(0));
        System.out.println(beschrijf(7));
    }
}

Toelichting: Minder nesting en duidelijke ‘speciale gevallen’ verbeteren de leesbaarheid.

Voorbeeld 9 — Combineren met logische operatoren Introductie: Combineer voorwaarden met EN (&&) en OF (||) voor expressieve checks.

public class Combinaties {
    public static void main(String[] args) {
        int leeftijd = 19;
        boolean toestemmingOuder = true;
        if (leeftijd >= 18 || toestemmingOuder) {
            System.out.println("toestaan");
        }
        if (leeftijd >= 18 && toestemmingOuder) {
            System.out.println("speciaal tarief");
        }
    }
}

Toelichting: Gebruik || voor alternatieve toegang en && voor samenlopende eisen.

Tips:

  • Gebruik switch wanneer je op één variabele meerdere vaste gevallen afhandelt.
  • Gebruik if/else bij complexe of samengestelde voorwaarden.
  • Schrijf compacte, leesbare voorwaarden; overweeg hulp-methoden voor duidelijkheid.

Koppeling met oefeningen:

  • Zie java-workbook/src/chapter_7.md voor opdrachten met if/else en switch-expressies.
  • Uitwerkingen in java-solutions/src/chapter_7.md.