Using When as an Expression Returning a Value in Kotlin
📖 Scenario: You are creating a simple program that assigns a message based on a day number. This is like checking the day of the week and giving a friendly note.
🎯 Goal: Build a Kotlin program that uses when as an expression to return a message string based on a day number.
📋 What You'll Learn
Create an integer variable day with the value 3
Create a variable message that uses when as an expression to assign a string based on day
Use when with cases for days 1 to 7, returning the correct day name
Print the message variable
💡 Why This Matters
🌍 Real World
Using <code>when</code> expressions helps in apps to decide actions based on user input or data values, like showing messages or choosing options.
💼 Career
Understanding <code>when</code> expressions is important for Kotlin developers to write clean and readable decision-making code.
Progress0 / 4 steps
1
Create the day variable
Create an integer variable called day and set it to 3.
Kotlin
Hint
Use val day = 3 to create the variable.
2
Set up the when expression
Create a variable called message that uses when as an expression on day. Start the when expression with cases for 1 and 2 returning "Monday" and "Tuesday" respectively.
Kotlin
Hint
Use val message = when(day) { 1 -> "Monday"; 2 -> "Tuesday"; else -> "Unknown" }.
3
Add all days to the when expression
Extend the when expression for message to include all days from 1 to 7 returning "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", and "Sunday" respectively.
Kotlin
Hint
Add all days as cases in the when expression.
4
Print the message
Write a println statement to print the message variable.
Kotlin
Hint
Use println(message) to show the result.
Practice
(1/5)
1. What does the when expression in Kotlin return when used as an expression?
easy
A. It returns a value based on the matched case.
B. It always returns Unit (no value).
C. It returns a Boolean indicating if a case matched.
D. It throws an exception if no case matches.
Solution
Step 1: Understand when as expression
In Kotlin, when can be used as an expression that returns a value depending on which case matches.
Step 2: Compare with other options
It does not always return Unit, nor a Boolean, and it requires an else branch to avoid exceptions, so it won't throw by default.
Final Answer:
It returns a value based on the matched case. -> Option A
Quick Check:
when returns value [OK]
Hint: Remember: when returns the matched case value [OK]
Common Mistakes:
Thinking when always returns Unit
Confusing when with if returning Boolean
Forgetting to add an else branch
2. Which of the following is the correct syntax to use when as an expression returning a value in Kotlin?
easy
A. val result = when x { 1 -> "One"; else -> "Other" }
B. val result = when (x) { x > 0 -> "Positive" else -> "Non-positive" }
C. val result = when { x > 0 -> "Positive"; else -> "Non-positive" }
D. val result = when (x) { in 1..10 -> "Small"; else -> "Large" }
Solution
Step 1: Check correct when syntax with argument
val result = when (x) { in 1..10 -> "Small"; else -> "Large" } uses when (x) with cases separated by semicolons and an else branch, which is correct.
Step 2: Identify syntax errors in other options
val result = when { x > 0 -> "Positive"; else -> "Non-positive" } uses semicolons inside braces correctly; val result = when (x) { x > 0 -> "Positive" else -> "Non-positive" } misses semicolon before else; val result = when x { 1 -> "One"; else -> "Other" } misses parentheses around x.
Final Answer:
val result = when (x) { in 1..10 -> "Small"; else -> "Large" } -> Option D
Quick Check:
Correct when syntax uses parentheses and semicolons [OK]
Hint: Use parentheses around variable and semicolons between cases [OK]
Common Mistakes:
Omitting parentheses around the variable
Using commas instead of semicolons
Missing semicolon before else branch
3. What is the output of the following Kotlin code?
val x = 5
val result = when {
x < 0 -> "Negative"
x == 0 -> "Zero"
x in 1..10 -> "Small"
else -> "Large"
}
println(result)
medium
A. Small
B. Zero
C. Negative
D. Large
Solution
Step 1: Evaluate conditions in order
x = 5 is not less than 0, not equal to 0, but is in 1..10 range, so the third case matches.
Step 2: Determine returned value
The matched case returns "Small", so result is "Small".
Final Answer:
Small -> Option A
Quick Check:
5 in 1..10 = true, returns "Small" [OK]
Hint: Check conditions top to bottom; first true case returns value [OK]
Common Mistakes:
Assuming else branch runs for 5
Confusing equality and range checks
Ignoring order of conditions
4. Identify the error in this Kotlin code using when as an expression:
val x = 3
val result = when (x) {
1 -> "One"
2 -> "Two"
}
println(result)
medium
A. Incorrect variable name in when.
B. Missing else branch causes compilation error.
C. Semicolons missing between cases.
D. Cannot use when as expression.
Solution
Step 1: Check completeness of when expression
The when expression covers only 1 and 2, but x = 3 is not handled and no else branch is provided.
Step 2: Understand Kotlin requirement for exhaustive when
When used as an expression, when must be exhaustive, so missing else causes a compilation error.
Final Answer:
Missing else branch causes compilation error. -> Option B
Quick Check:
Exhaustive when needs else [OK]
Hint: Always add else if not all cases covered [OK]
Common Mistakes:
Ignoring missing else branch
Thinking semicolons are mandatory
Assuming when always compiles without else
5. You want to assign a grade based on a score using when as an expression. Which code correctly returns "A" for scores 90 and above, "B" for 80-89, "C" for 70-79, and "F" otherwise?
hard
A. val grade = when (score) {
score >= 90 -> "A"
score >= 80 -> "B"
score >= 70 -> "C"
else -> "F"
}
B. val grade = when (score) {
in 90..100 -> "A"
in 80..89 -> "B"
in 70..79 -> "C"
else -> "F"
}
C. val grade = when {
score >= 90 -> "A"
score >= 80 -> "B"
score >= 70 -> "C"
else -> "F"
}
D. val grade = when {
in 90..100 -> "A"
in 80..89 -> "B"
in 70..79 -> "C"
else -> "F"
}
Solution
Step 1: Understand when with condition expressions
val grade = when {
score >= 90 -> "A"
score >= 80 -> "B"
score >= 70 -> "C"
else -> "F"
} uses when without argument and conditions like score >= 90, which is valid and clear for ranges.
Step 2: Check other options for errors
val grade = when (score) {
in 90..100 -> "A"
in 80..89 -> "B"
in 70..79 -> "C"
else -> "F"
} is correct syntax but uses ranges; val grade = when (score) {
score >= 90 -> "A"
score >= 80 -> "B"
score >= 70 -> "C"
else -> "F"
} incorrectly uses conditions inside when(score) which expects values, not conditions; val grade = when {
in 90..100 -> "A"
in 80..89 -> "B"
in 70..79 -> "C"
else -> "F"
} uses in without variable, which is invalid.
Final Answer:
val grade = when {
score >= 90 -> "A"
score >= 80 -> "B"
score >= 70 -> "C"
else -> "F"
} -> Option C
Quick Check:
Use when without argument for conditions [OK]
Hint: Use when without argument for condition checks [OK]
Common Mistakes:
Using conditions inside when(variable)
Omitting variable in range checks
Misplacing in keyword
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.