Bird
Raised Fist0
Kotlinprogramming~3 mins

Why When as expression returning value in Kotlin? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if you could replace messy if-else checks with a simple, powerful tool that returns values instantly?

The Scenario

Imagine you have a list of fruits and you want to print a special message for each type. Without a smart tool, you write many if-else checks for each fruit manually.

The Problem

This manual way is slow and messy. You might forget a case or write repeated code. It's hard to read and fix later, especially when you add more fruits.

The Solution

The when expression in Kotlin lets you check many conditions clearly and returns a value directly. It makes your code shorter, easier to read, and less error-prone.

Before vs After
✗ Before
var message: String
if (fruit == "Apple") {
  message = "You picked an apple!"
} else if (fruit == "Banana") {
  message = "You picked a banana!"
} else {
  message = "Unknown fruit"
}
✓ After
val message = when (fruit) {
  "Apple" -> "You picked an apple!"
  "Banana" -> "You picked a banana!"
  else -> "Unknown fruit"
}
What It Enables

You can write clean, clear code that chooses values based on many conditions without repeating yourself.

Real Life Example

Think about a vending machine that gives different messages depending on the button pressed. Using when makes it easy to return the right message for each button.

Key Takeaways

When as expression returns a value directly, simplifying your code.

It replaces long if-else chains with clear, readable branches.

Helps avoid mistakes and makes adding new cases easy.

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

  1. Step 1: Understand when as expression

    In Kotlin, when can be used as an expression that returns a value depending on which case matches.
  2. 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.
  3. Final Answer:

    It returns a value based on the matched case. -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    val result = when (x) { in 1..10 -> "Small"; else -> "Large" } -> Option D
  4. 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

  1. 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.
  2. Step 2: Determine returned value

    The matched case returns "Small", so result is "Small".
  3. Final Answer:

    Small -> Option A
  4. 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

  1. 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.
  2. Step 2: Understand Kotlin requirement for exhaustive when

    When used as an expression, when must be exhaustive, so missing else causes a compilation error.
  3. Final Answer:

    Missing else branch causes compilation error. -> Option B
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    val grade = when { score >= 90 -> "A" score >= 80 -> "B" score >= 70 -> "C" else -> "F" } -> Option C
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard