What if your program could automatically reject wrong answers without you writing endless checks?
Why enums constrain values in Kotlin - The Real Reasons
Imagine you are writing a program that handles days of the week. You ask users to type the day as text, like "Monday" or "Friday". But users might type "Mon", "monday", or even "Funday" by mistake.
Checking every possible typo or variation manually is slow and error-prone. You might forget some cases or accept invalid inputs, causing bugs or crashes later.
Enums let you define a fixed set of allowed values, like the seven days of the week. This way, the program only accepts valid days, preventing mistakes and making your code safer and easier to understand.
val day = readLine() if(day == "Monday" || day == "Tuesday" || day == "Wednesday" /* and so on */) { // do something }
enum class Day { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } val day = Day.valueOf(readLine()?.capitalize() ?: "Monday") // do something with day
Enums let your program trust the data it works with, making it safer and easier to maintain.
Think of a traffic light system where the light can only be Red, Yellow, or Green. Using enums ensures the program never accepts invalid colors like Blue or Purple.
Manual checks for allowed values are slow and error-prone.
Enums define a fixed set of valid options clearly and safely.
This reduces bugs and makes code easier to read and maintain.
Practice
Solution
Step 1: Understand enum purpose
Enums define a limited set of named values to represent options clearly.Step 2: Identify why limiting values helps
Limiting values prevents invalid or unexpected inputs, reducing bugs.Final Answer:
To prevent invalid values and reduce errors -> Option AQuick Check:
Enums limit values = prevent errors [OK]
- Thinking enums allow any value
- Believing enums improve speed directly
- Confusing enums with variables
Solution
Step 1: Recall Kotlin enum syntax
Kotlin enums use 'enum class' followed by the name and curly braces with values separated by commas.Step 2: Check each option
enum class Direction { NORTH, SOUTH, EAST, WEST } matches correct syntax; others have wrong keywords or separators.Final Answer:
enum class Direction { NORTH, SOUTH, EAST, WEST } -> Option CQuick Check:
Correct enum syntax = enum class Direction { NORTH, SOUTH, EAST, WEST } [OK]
- Using 'class enum' instead of 'enum class'
- Separating values with semicolons
- Assigning enum like a variable
enum class Color { RED, GREEN, BLUE }
fun main() {
val c: Color = Color.GREEN
println(c == Color.GREEN)
println(c == Color.RED)
}Solution
Step 1: Understand enum comparison
Enum values are compared by identity. c is assigned Color.GREEN.Step 2: Evaluate println statements
c == Color.GREEN is true; c == Color.RED is false.Final Answer:
true\nfalse -> Option DQuick Check:
Enum equality matches assigned value [OK]
- Assuming enums compare by string content
- Confusing true/false order
- Using == incorrectly with enums
enum class Size { SMALL, MEDIUM, LARGE }
fun main() {
val s: Size = Size.EXTRA_LARGE
println(s)
}Solution
Step 1: Check enum declaration
Enum Size has only SMALL, MEDIUM, LARGE values defined.Step 2: Analyze usage error
Code tries to assign Size.EXTRA_LARGE which is not defined, causing error.Final Answer:
Size.EXTRA_LARGE does not exist in the enum -> Option BQuick Check:
Using undefined enum value = error [OK]
- Assuming enums accept any value
- Thinking semicolons are required
- Believing enum values must be lowercase
Solution
Step 1: Understand enum benefits for input restriction
Enums limit values to a fixed set, preventing invalid inputs.Step 2: Compare approaches
Define enum class Mode { EASY, MEDIUM, HARD } and use Mode type for input uses enum type, ensuring only EASY, MEDIUM, HARD are valid. Others allow invalid inputs or require manual checks.Final Answer:
Define enum class Mode { EASY, MEDIUM, HARD } and use Mode type for input -> Option AQuick Check:
Enums enforce valid values automatically [OK]
- Using strings without validation
- Using integers without clear meaning
- Allowing any input without checks
Ready to prove it?
Pass the test and this pattern moves unknown
