Bird
Raised Fist0
Kotlinprogramming~10 mins

Enum entries iteration in Kotlin - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Enum entries iteration
Start
↓
Access enum class
↓
Call entries property
↓
Loop over entries
↓
Process each enum entry
↓
End loop
↓
Finish
The program accesses the enum class, gets all entries, loops over them one by one, and processes each entry.
Execution Sample
Kotlin
enum class Color { RED, GREEN, BLUE }

fun main() {
    for (color in Color.entries) {
        println(color)
    }
}
This code loops over all enum entries of Color and prints each one.
Execution Table
StepActionCurrent EntryOutput
1Start loop over Color.entries
2Process first entryREDRED
3Process second entryGREENGREEN
4Process third entryBLUEBLUE
5End loop - no more entries
💡 All enum entries processed, loop ends.
Variable Tracker
VariableStartAfter 1After 2After 3Final
colorREDGREENBLUE
Key Moments - 3 Insights
Why do we use Color.entries instead of Color.values()?
In Kotlin 1.9+, entries is the recommended property to get enum entries as a list, which is more idiomatic and safer than the older values() method. See execution_table rows 1 and 2 where entries is used.
What happens if the enum has no entries?
The loop will not execute any iterations because entries will be an empty list, so no output is produced. This is shown by the immediate end of the loop in execution_table row 5.
Can we modify enum entries inside the loop?
No, enum entries are constants and immutable. The loop only reads each entry. Attempting to modify them will cause a compile error.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'color' at step 3?
ARED
BGREEN
CBLUE
DNo value
💡 Hint
Check the 'Current Entry' column at step 3 in execution_table.
At which step does the loop finish iterating all enum entries?
AStep 5
BStep 2
CStep 4
DStep 3
💡 Hint
Look for the 'End loop' action in execution_table.
If a new entry YELLOW is added to Color, how many iterations will the loop have?
A5
B3
C4
DCannot tell
💡 Hint
The loop iterates once per enum entry, see variable_tracker showing 3 entries currently.
Concept Snapshot
enum class MyEnum { A, B, C }

for (entry in MyEnum.entries) {
    println(entry)
}

- entries returns all enum entries as a list
- loop iterates over each entry
- entries is preferred over values() in Kotlin 1.9+
Full Transcript
This example shows how to loop over all entries of a Kotlin enum class using the entries property. The program starts by accessing the enum class Color, then calls Color.entries to get a list of all enum entries. It then loops over each entry, assigning it to the variable color, and prints it. The loop runs once for each enum entry: RED, GREEN, and BLUE. After processing all entries, the loop ends. The variable color changes value each iteration to the current enum entry. Beginners often wonder why entries is used instead of values(), or what happens if the enum is empty. The entries property is the modern, idiomatic way to get enum entries as a list. If the enum has no entries, the loop simply does not run. Enum entries are constants and cannot be modified inside the loop. The visual quiz tests understanding of the variable values at each step, when the loop ends, and how adding entries affects iteration count.

Practice

(1/5)
1. What does EnumName.values() return in Kotlin?
easy
A. An array of all enum entries in the order they are declared
B. A list of enum names as strings
C. The first enum entry only
D. A map of enum entries to their ordinal values

Solution

  1. Step 1: Understand the purpose of values()

    The values() function returns all enum entries as an array in the order they are declared.
  2. Step 2: Compare options with this behavior

    Only An array of all enum entries in the order they are declared correctly describes this behavior; others describe different data types or partial data.
  3. Final Answer:

    An array of all enum entries in the order they are declared -> Option A
  4. Quick Check:

    EnumName.values() returns all entries [OK]
Hint: Remember: values() gives all enum entries as an array [OK]
Common Mistakes:
  • Thinking values() returns strings instead of enum objects
  • Assuming values() returns only one entry
  • Confusing values() with valueOf()
2. Which of the following is the correct syntax to iterate over all entries of an enum Color in Kotlin?
easy
A. for (c in Color.values()) { println(c) }
B. for (c in Color) { println(c) }
C. for (c in Color.entries()) { println(c) }
D. for (c in Color.all()) { println(c) }

Solution

  1. Step 1: Recall the correct method to get enum entries

    In Kotlin, values() returns all enum entries as an array.
  2. Step 2: Check each option's syntax

    The correct syntax is for (c in Color.values()) { println(c) }, which uses Color.values() correctly in a for loop. The other options use invalid syntax: iterating directly over Color, or non-existent methods like entries() or all().
  3. Final Answer:

    for (c in Color.values()) { println(c) } -> Option A
  4. Quick Check:

    Use values() to loop enums [OK]
Hint: Use EnumName.values() to loop enums [OK]
Common Mistakes:
  • Trying to loop directly over enum class without values()
  • Using non-existent methods like entries() or all()
  • Missing parentheses after values()
3. Given the enum:
enum class Direction { NORTH, EAST, SOUTH, WEST }

What is the output of this code?
for (d in Direction.values()) {
    print(d.name.first())
}
medium
A. Direction.NORTHDirection.EASTDirection.SOUTHDirection.WEST
B. north east south west
C. NESW
D. N E S W

Solution

  1. Step 1: Understand the loop and print statement

    The loop goes through all enum entries: NORTH, EAST, SOUTH, WEST. For each, it prints the first character of the name.
  2. Step 2: Determine printed characters

    First letters are 'N', 'E', 'S', 'W'. They are printed without spaces or newlines.
  3. Final Answer:

    NESW -> Option C
  4. Quick Check:

    First letters combined = NESW [OK]
Hint: Check what exactly is printed inside the loop [OK]
Common Mistakes:
  • Assuming spaces or newlines are printed
  • Printing full names instead of first letters
  • Confusing enum name with enum value
4. What is wrong with this Kotlin code snippet?
enum class Status { STARTED, RUNNING, FINISHED }

for (s in Status) {
    println(s)
}
medium
A. The loop variable must be declared as val
B. Enums cannot be iterated in Kotlin
C. The enum class must be declared inside a function
D. Missing call to values() to get enum entries

Solution

  1. Step 1: Identify how to iterate enums in Kotlin

    Enums cannot be iterated directly; you must use Status.values() to get all entries.
  2. Step 2: Check the code for missing values()

    The code tries to loop over Status directly, which is invalid syntax.
  3. Final Answer:

    Missing call to values() to get enum entries -> Option D
  4. Quick Check:

    Use Enum.values() to iterate enums [OK]
Hint: Always use values() to loop enums [OK]
Common Mistakes:
  • Trying to loop enum class directly without values()
  • Thinking enums are iterable by default
  • Adding unnecessary val in loop declaration
5. You have this enum:
enum class Level(val difficulty: Int) {
    EASY(1), MEDIUM(2), HARD(3)
}

How do you create a map from each enum entry to its difficulty using iteration?
hard
A. val map = Level.values().map { it.difficulty }
B. val map = Level.values().associateWith { it.difficulty }
C. val map = Level.associate { it to it.difficulty }
D. val map = Level.values().associateBy { it.difficulty }

Solution

  1. Step 1: Understand the goal

    We want a map where keys are enum entries and values are their difficulty.
  2. Step 2: Use values() and associateWith

    Level.values() gives all entries; associateWith maps each entry to a value.
  3. Step 3: Check options

    val map = Level.values().associateWith { it.difficulty } correctly uses associateWith { it.difficulty }. val map = Level.associate { it to it.difficulty } is invalid because Level is a class, not a collection. val map = Level.values().map { it.difficulty } returns a list, not a map. val map = Level.values().associateBy { it.difficulty } maps difficulty to enum, reversing keys and values.
  4. Final Answer:

    val map = Level.values().associateWith { it.difficulty } -> Option B
  5. Quick Check:

    Use values() + associateWith for map [OK]
Hint: Use values().associateWith { } to map enums [OK]
Common Mistakes:
  • Trying to call associate on enum class directly
  • Using map() instead of associateWith() for key-value pairs
  • Confusing associateBy() which reverses keys and values
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard