1.4-Software-Development-Principles

Enums

Introduction

Enums (enumeraties) bieden in Java een manier om een set van vaste constanten te definiëren. Dit kan de code leesbaarder, veiliger en makkelijker te onderhouden maken.

Voordelen van Enums

  1. Typeveiligheid: Enums zorgen ervoor dat een variabele alleen één van de vooraf gedefinieerde waarden kan aannemen. Dit vermindert fouten door verkeerde waarden toe te wijzen.
  2. Leesbaarheid: Door enums te gebruiken in plaats van bijvoorbeeld integers, wordt de code leesbaarder. De naam van een enum-waarde kan direct aangeven wat het betekent.
  3. Methoden en velden: Enums in Java zijn meer dan alleen lijsten van waarden; ze kunnen velden, methoden en constructors bevatten, waardoor ze krachtige tools zijn voor geavanceerdere logica.
  4. Gebruik met switch-statements: Enums werken goed samen met switch-statements, waardoor je gemakkelijk op verschillende waarden kunt schakelen met een duidelijke syntax.

Goed Gebruik van Enums

Een goed voorbeeld van het gebruik van enums is het definiëren van dagen van de week, waarbij elk lid van de enum een specifieke dag voorstelt. Dit maakt de code duidelijk en makkelijk te onderhouden.

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

public class Schedule {
    private Day day;

    public Schedule(Day day) {
        this.day = day;
    }

    public void printActivity() {
        switch (day) {
            case SATURDAY:
            case SUNDAY:
                System.out.println("Relax, it's weekend!");
                break;
            default:
                System.out.println("Working day. Time to code!");
        }
    }
}

Slecht Gebruik van Enums

De reden waarom dagen van de week zo goed werken is omdat deze lijst bekend is en zeer waarschijnlijk niet (snel) zal veranderen.

Een voorbeeld van slecht gebruik is het overbodig maken van enums door ze te gebruiken voor waarden die niet vast zijn of beter gediend zijn door andere datastructuren zoals klassen of interfaces.

Bijvoorbeeld, het gebruiken van een enum om gebruikersrollen te beheren in een applicatie waar nieuwe rollen kunnen worden toegevoegd of bestaande rollen kunnen veranderen, is geen goed gebruik.

Dit beperkt de flexibiliteit omdat enums statisch gedefinieerd worden en niet kunnen worden uitgebreid of aangepast tijdens runtime.

public enum UserRole {
    ADMIN, USER, GUEST; // Not flexible; difficult to expand with new roles without changing the code
}

In dergelijke gevallen is het beter om een klasse (UserRoleManager) samen met een lijst te gebruiken om dynamisch uitbreidbare gebruikersrollen te beheren.

Geavanceerde enums

Enums kunnen velden en methoden hebben, waardoor elke constante zijn eigen status en gedrag kan hebben. Bijvoorbeeld deze verkeerslicht enum (TrafficLight), bewaart ook de tijd dat ieder licht geton moet worden.

public enum TrafficLight {
    RED(30), 
    GREEN(45), 
    YELLOW(5); // Duration in seconds for each light
    
    private final int duration;

    TrafficLight(int duration) {
        this.duration = duration;
    }

    public int getDuration() {
        return duration;
    }
}

public class TrafficControl {
    public static void main(String[] args) {
        for (TrafficLight light : TrafficLight.values()) {
            System.out.println(light + " light duration: " + light.getDuration() + " seconds");
        }
    }
}

Conclusie

Enums bieden een krachtige manier om een set van vaste constanten in Java te definiëren. Daarnaast biedt het een goede manier om de bijbehorende gegevens op een heldere en duidelijke manier op te slaan. Het kiezen van duidelijke namen voor elke waarde maakt je code veiliger, leesbaarder en onderhoudbaarder wordt.