An enum in Kotlin is a special class that represents a fixed set of constants. It helps group related values under one type, like days of the week or directions.
Click to reveal answer
beginner
What does it mean for a when expression to be exhaustive in Kotlin?
A when expression is exhaustive when it covers all possible cases of the input, so Kotlin knows no other case can happen. This means you don't need an else branch.
Click to reveal answer
intermediate
How does Kotlin ensure when is exhaustive when used with enums?
When you use a when expression with an enum, Kotlin requires you to handle all enum constants. If you miss one, the code won't compile unless you add an else branch.
Click to reveal answer
intermediate
Why is using an exhaustive when with enums helpful?
It helps catch errors early by making sure you handle every possible enum value. This avoids bugs where some cases are forgotten and improves code safety.
Click to reveal answer
beginner
Show a simple Kotlin enum and an exhaustive when expression example.
Example:<br><pre>enum class Direction { NORTH, SOUTH, EAST, WEST }
fun describe(dir: Direction) = when(dir) {
Direction.NORTH -> "Up"
Direction.SOUTH -> "Down"
Direction.EAST -> "Right"
Direction.WEST -> "Left"
}</pre>
Click to reveal answer
What happens if you miss an enum case in a when expression without an else branch?
AThe code will not compile.
BThe code will compile but throw an error at runtime.
CThe missing case will be ignored silently.
DKotlin will automatically add the missing case.
✗ Incorrect
Kotlin requires all enum cases to be handled in a when expression or an else branch must be present. Missing cases cause a compile error.
Which keyword is used to define an enum in Kotlin?
Aclass
Benum
Cobject
Dsealed
✗ Incorrect
The enum keyword defines an enum class in Kotlin.
Why might you prefer an exhaustive when over using else?
ATo allow missing cases without errors.
BTo make the code shorter.
CTo ensure all cases are explicitly handled.
DTo avoid using enums.
✗ Incorrect
Exhaustive when forces you to handle every enum case explicitly, reducing bugs.
What type of Kotlin construct is best suited for representing a fixed set of constants?
Afun
Bdata class
Cinterface
Denum class
✗ Incorrect
An enum class is designed to represent a fixed set of constants.
If you add a new value to an enum, what must you do to keep your when expressions exhaustive?
AAdd a new case for the new enum value in all <code>when</code> expressions.
BNothing, Kotlin updates them automatically.
CRemove the <code>when</code> expressions.
DAdd an <code>else</code> branch to all <code>when</code> expressions.
✗ Incorrect
You must update all when expressions to handle the new enum value to keep them exhaustive.
Explain what an exhaustive when expression is and why it is useful when working with enums in Kotlin.
Think about how Kotlin checks all enum values are handled.
You got /4 concepts.
Describe how Kotlin enforces handling all enum cases in a when expression and what happens if a case is missing.
Focus on Kotlin's compile-time checks.
You got /3 concepts.
Practice
(1/5)
1. What does the Kotlin when expression require when used with an enum class?
easy
A. All enum cases must be handled to ensure exhaustive checking.
B. Only one enum case needs to be handled.
C. The when expression cannot be used with enums.
D. You must use else even if all enum cases are handled.
Solution
Step 1: Understand enum and when usage
Kotlin enums define fixed values. The when expression can check these values.
Step 2: Check compiler requirements for exhaustive when
Kotlin requires all enum cases to be handled in when to be exhaustive, avoiding missing cases.
Final Answer:
All enum cases must be handled to ensure exhaustive checking. -> Option A
Quick Check:
Exhaustive when = all enum cases handled [OK]
Hint: Remember: when with enum must cover all cases [OK]
Common Mistakes:
Forgetting to handle all enum values
Using else unnecessarily when all cases are covered
Assuming when can't be exhaustive with enums
2. Which of the following is the correct syntax for a when expression that exhaustively checks all values of this enum?
Hint: List all enum values explicitly for exhaustive when [OK]
Common Mistakes:
Using else when all enum cases are handled
Missing some enum values in when
Using wrong types in when branches
3. What will be the output of this Kotlin code?
enum class Light { RED, GREEN, YELLOW }
fun signalMessage(light: Light) = when(light) {
Light.RED -> "Stop"
Light.GREEN -> "Go"
Light.YELLOW -> "Caution"
}
fun main() {
println(signalMessage(Light.YELLOW))
}
medium
A. Stop
B. Go
C. Caution
D. Compilation error
Solution
Step 1: Identify the enum value passed
The function is called with Light.YELLOW.
Step 2: Match enum value in when expression
The when expression returns "Caution" for Light.YELLOW.
Final Answer:
Caution -> Option C
Quick Check:
Light.YELLOW maps to "Caution" [OK]
Hint: Match enum value to when branch to find output [OK]
Common Mistakes:
Confusing enum values with strings
Assuming else is needed for exhaustive when
Expecting compilation error due to missing else
4. This Kotlin code does not compile. What is the error?
enum class Status { SUCCESS, ERROR, LOADING }
fun getStatusMessage(status: Status) = when(status) {
Status.SUCCESS -> "Done"
Status.ERROR -> "Failed"
}
medium
A. Missing else branch in when expression
B. Not all enum cases handled in when expression
C. Incorrect enum class declaration
D. Function return type missing
Solution
Step 1: Check enum cases handled in when
Only Status.SUCCESS and Status.ERROR are handled; Status.LOADING is missing.
Step 2: Understand Kotlin's exhaustive when requirement
When used as expression, all enum cases must be handled or else an else branch is needed.
Final Answer:
Not all enum cases handled in when expression -> Option B
Quick Check:
Missing enum case causes compilation error [OK]
Hint: Cover all enum values or add else to fix compilation [OK]
Common Mistakes:
Assuming else is optional when missing enum cases
Ignoring missing enum values in when
Thinking function return type causes error
5. Given this enum and function, how can you modify getDayType to use an exhaustive when expression without an else branch?
enum class Day { MON, TUE, WED, THU, FRI, SAT, SUN }
fun getDayType(day: Day): String = when(day) {
Day.SAT, Day.SUN -> "Weekend"
Day.MON, Day.TUE, Day.WED, Day.THU, Day.FRI -> "Weekday"
}
medium
A. Add an else branch to cover any missing cases.
B. Add all enum values explicitly in separate branches without combining.
C. Add a default return statement after when.
D. Keep combined branches as is; Kotlin treats it as exhaustive.
Solution
Step 1: Analyze current when branches
The branches cover Day.SAT, Day.SUN and Day.MON, Day.TUE, Day.WED, Day.THU, Day.FRI, which includes all seven enum values.
Step 2: Verify Kotlin's exhaustive when rules
Kotlin considers the when exhaustive if all enum cases are explicitly covered across branches, even when grouped with commas in the same branch. No else branch is needed.
Final Answer:
Keep combined branches as is; Kotlin treats it as exhaustive. -> Option D
Quick Check:
Grouped coverage of all enum cases = exhaustive without else [OK]
Hint: Comma-grouped enum values in branches make when exhaustive [OK]
Common Mistakes:
Thinking combined branches don't count as exhaustive
Believing you must use separate branches for each enum value
Unnecessarily adding an else branch
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.