Bird
Raised Fist0
Kotlinprogramming~20 mins

When as expression returning value in Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
When Expression Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of when expression returning a value
What is the output of this Kotlin code using when as an expression?
Kotlin
val x = 3
val result = when (x) {
    1 -> "One"
    2 -> "Two"
    3 -> "Three"
    else -> "Unknown"
}
println(result)
AThree
BTwo
COne
DUnknown
Attempts:
2 left
💡 Hint
Check which case matches the value of x.
❓ Predict Output
intermediate
2:00remaining
When expression with multiple matching conditions
What will this Kotlin code print?
Kotlin
val y = 5
val output = when (y) {
    in 1..4 -> "Low"
    in 5..10 -> "Medium"
    else -> "High"
}
println(output)
ALow
BSyntax Error
CHigh
DMedium
Attempts:
2 left
💡 Hint
Look at the range that includes 5.
❓ Predict Output
advanced
2:00remaining
When expression with smart casting and return value
What is the output of this Kotlin code?
Kotlin
fun describe(obj: Any): String {
    return when (obj) {
        is String -> "String of length ${obj.length}"
        is Int -> "Integer value $obj"
        else -> "Unknown type"
    }
}

println(describe("Hello"))
AInteger value Hello
BString of length 5
CUnknown type
DCompilation error
Attempts:
2 left
💡 Hint
Check the type of the argument passed to describe.
❓ Predict Output
advanced
2:00remaining
When expression with no matching branch and else clause
What will this Kotlin code print?
Kotlin
val z = 100
val result = when (z) {
    in 1..10 -> "Small"
    in 11..50 -> "Medium"
    else -> "Large"
}
println(result)
AMedium
BSmall
CLarge
DRuntime exception
Attempts:
2 left
💡 Hint
Check which condition matches the value 100.
❓ Predict Output
expert
2:30remaining
When expression returning different types and type inference
What is the type and value of result after running this Kotlin code?
Kotlin
val input: Any = 42
val result = when (input) {
    is Int -> input * 2
    is String -> input.length
    else -> 0
}
println(result)
AType: Int, Value: 84
BType: String, Value: "42"
CType: Any?, Value: null
DType: Int, Value: 42
Attempts:
2 left
💡 Hint
Look at the type of input and what each branch returns.

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