Enums
oooh my favorite
Enums (Enumerations)
What is an Enum?
An enum (short for enumeration) is a special Java type used to define a collection of named constants. Enums are used when you have a fixed set of related values that a variable can hold, making your code more readable and less error-prone.
Why Use Enums?
Readability: Instead of using arbitrary numbers or strings to represent states or modes, enums give meaningful names.
Type Safety: Enums restrict values to a predefined set, preventing invalid assignments.
Maintainability: If you need to add or modify states, you update the enum in one place.
Better Code Structure: Enums can have methods and fields, allowing richer behavior.
Simple Example
Suppose you have a shooter subsystem with different states:
public enum ShooterState {
IDLE,
SPINNING_UP,
SHOOTING,
COOLING_DOWN
}
You can now use this enum to represent the current state:
ShooterState currentState = ShooterState.IDLE;
if (currentState == ShooterState.SPINNING_UP) {
// Run motors to spin up the shooter
}
This is much clearer than using integers like 0, 1, 2, or strings like "idle"
which are prone to typos.
Enums with Data and Methods
Enums can also have variables, constructors, and methods. For example:
public enum ShooterState {
IDLE(0),
SPINNING_UP(5000), // RPM target
SHOOTING(6000),
COOLING_DOWN(0);
private final int targetRPM;
ShooterState(int rpm) {
this.targetRPM = rpm;
}
public int getTargetRPM() {
return targetRPM;
}
}
You can then access the associated value:
int rpm = ShooterState.SPINNING_UP.getTargetRPM(); // rpm = 5000
This allows your enum to not only represent a state but also store related parameters.
Enums in Subsystem State Machines
Enums are ideal to manage subsystem states clearly and reliably. For example, an intake roller subsystem might have:
public enum IntakeRollerState {
OFF,
INTAKING,
EXHAUSTING
}
Your code can then switch behavior based on the state, like:
switch (currentState) {
case OFF:
stopMotors();
break;
case INTAKING:
runIntakeMotors();
break;
case EXHAUSTING:
reverseIntakeMotors();
break;
}
Summary
Enums represent a fixed set of related constants.
They improve code readability, safety, and maintainability.
Can store associated data and methods.
Perfect for managing states and modes in robot code.
Last updated