Bird
Raised Fist0
Kotlinprogramming~5 mins

When expression as powerful switch in Kotlin - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: When expression as powerful switch
O(1)
Understanding Time Complexity

We want to understand how the time it takes to run a Kotlin when expression changes as we add more cases.

How does checking many conditions affect the program's speed?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


fun describeNumber(x: Int): String {
    return when (x) {
        1 -> "One"
        2 -> "Two"
        3 -> "Three"
        4 -> "Four"
        5 -> "Five"
        else -> "Unknown"
    }
}
    

This code checks the value of x and returns a matching word or "Unknown" if no match is found.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: No repeating operations; compiler optimizes when on integers to a jump table or similar structure.
  • How many times: Constant time (O(1)) lookup, independent of the number of cases.
How Execution Grows With Input

The Kotlin compiler translates when expressions with constant integer values into efficient bytecode instructions (like tableswitch), resulting in constant time execution.

Number of Cases (n)Approx. Checks
5~1 check
10~1 check
100~1 check

Pattern observation: Execution time remains constant regardless of the number of cases.

Final Time Complexity

Time Complexity: O(1)

This means the time to find a match stays constant even as you add more cases, thanks to compiler optimizations.

Common Mistake

[X] Wrong: "The when expression checks each case sequentially like chained if-else, so it's O(n)."

[OK] Correct: For integer constants, the Kotlin compiler (targeting JVM/JS/Native) uses jump tables or hash-based lookups, making it constant time, not linear.

Interview Connect

Understanding compiler optimizations for control structures like when shows deeper knowledge of performance, valued in system design and optimization interviews.

Self-Check

What if the when expression used ranges or types instead of single values? How would that affect the time complexity?

Hint: Ranges may use binary search (O(log n)), but single constants remain O(1). Check bytecode!

Practice

(1/5)
1. What is the main purpose of the when expression in Kotlin?
easy
A. To define functions with multiple parameters
B. To create loops that repeat actions multiple times
C. To select actions based on different values, like a switch statement
D. To declare variables with different types

Solution

  1. Step 1: Understand the role of when

    The when expression is used to choose between different actions depending on the value it checks.
  2. Step 2: Compare with other options

    The other options describe loops, functions, and variables, which are unrelated to when.
  3. Final Answer:

    To select actions based on different values, like a switch statement -> Option C
  4. Quick Check:

    when chooses actions by value [OK]
Hint: Think of when as a smarter switch [OK]
Common Mistakes:
  • Confusing when with loops
  • Thinking when declares variables
  • Mixing when with function definitions
2. Which of the following is the correct syntax for a simple when expression in Kotlin?
easy
A. when x { 1: println("One") 2: println("Two") else: println("Other") }
B. switch (x) { case 1: println("One") case 2: println("Two") default: println("Other") }
C. if (x == 1) println("One") else if (x == 2) println("Two") else println("Other")
D. when (x) { 1 -> println("One") 2 -> println("Two") else -> println("Other") }

Solution

  1. Step 1: Identify Kotlin when syntax

    The correct syntax uses when (x) { value -> action } with arrows and braces.
  2. Step 2: Check other options

    when x { 1: println("One") 2: println("Two") else: println("Other") } uses colons (:) instead of arrows (->) and lacks parentheses. switch (x) { case 1: ... } is Java or JavaScript syntax. if (x == 1) ... is an if-else chain.
  3. Final Answer:

    when (x) { 1 -> println("One") 2 -> println("Two") else -> println("Other") } -> Option D
  4. Quick Check:

    Kotlin when uses arrows and braces [OK]
Hint: Look for arrows (->) inside braces for when [OK]
Common Mistakes:
  • Using colon (:) instead of arrow (->)
  • Confusing when with switch syntax
  • Omitting parentheses around the variable
3. What will be the output of the following Kotlin code?
val x = 3
when (x) {
  1, 2 -> println("Small")
  in 3..5 -> println("Medium")
  else -> println("Large")
}
medium
A. Medium
B. Small
C. Large
D. No output (runtime error)

Solution

  1. Step 1: Check the value of x

    The variable x is 3.
  2. Step 2: Match x with when cases

    3 is not in 1 or 2, but it is in the range 3..5, so "Medium" is printed.
  3. Final Answer:

    Medium -> Option A
  4. Quick Check:

    3 in 3..5 means output is "Medium" [OK]
Hint: Check ranges and multiple values carefully [OK]
Common Mistakes:
  • Ignoring ranges and picking wrong case
  • Assuming 3 matches 1 or 2
  • Thinking else runs when a range matches
4. Identify the error in this Kotlin when expression:
val y = 10
when y {
  5 -> println("Five")
  10 -> println("Ten")
  else -> println("Other")
}
medium
A. Missing parentheses around y in when
B. Missing arrow (->) after else
C. Using when without braces
D. No error, code is correct

Solution

  1. Step 1: Check when syntax

    The when expression requires parentheses around the variable: when (y).
  2. Step 2: Check other syntax parts

    Braces are present. Arrows (->) are correctly used after all cases including else. The syntax error is missing parentheses around y.
  3. Final Answer:

    Missing parentheses around y in when -> Option A
  4. Quick Check:

    when needs parentheses around the subject [OK]
Hint: Always put parentheses around the variable in when [OK]
Common Mistakes:
  • Omitting parentheses around the variable
  • Forgetting arrows after cases
  • Using when without braces
5. You want to use a when expression to categorize ages into groups: "Child" for 0-12, "Teen" for 13-19, "Adult" for 20-64, and "Senior" for 65 and above. Which when expression correctly implements this?
hard
A. when (age) { in 0..12 -> "Child" in 13..19 -> "Teen" in 20..64 -> "Adult" else -> "Senior" }
B. when { age >= 0 && age <= 12 -> "Child" age >= 13 && age <= 19 -> "Teen" age >= 20 && age <= 64 -> "Adult" age >= 65 -> "Senior" else -> "Unknown" }
C. when (age) { 0..12 -> "Child" 13..19 -> "Teen" 20..64 -> "Adult" 65 -> "Senior" }
D. when (age) { in 0..12 -> "Child" in 13..19 -> "Teen" in 20..64 -> "Adult" in 65..100 -> "Senior" else -> "Unknown" }

Solution

  1. Step 1: Understand when with condition checks

    when { age >= 0 && age <= 12 -> "Child" age >= 13 && age <= 19 -> "Teen" age >= 20 && age <= 64 -> "Adult" age >= 65 -> "Senior" else -> "Unknown" } uses when without argument and checks conditions with boolean expressions, which is valid and flexible.
  2. Step 2: Check other options for correctness

    when (age) { in 0..12 -> "Child" in 13..19 -> "Teen" in 20..64 -> "Adult" else -> "Senior" } is valid but misses handling negative ages explicitly; when (age) { 0..12 -> "Child" 13..19 -> "Teen" 20..64 -> "Adult" 65 -> "Senior" } uses invalid syntax for ranges; when (age) { in 0..12 -> "Child" in 13..19 -> "Teen" in 20..64 -> "Adult" in 65..100 -> "Senior" else -> "Unknown" } limits "Senior" to 65-100 and has an else for unknown ages.
  3. Step 3: Choose the best option

    when { age >= 0 && age <= 12 -> "Child" age >= 13 && age <= 19 -> "Teen" age >= 20 && age <= 64 -> "Adult" age >= 65 -> "Senior" else -> "Unknown" } covers all age ranges clearly with conditions and includes an else for unknown ages.
  4. Final Answer:

    when { age >= 0 && age <= 12 -> "Child" age >= 13 && age <= 19 -> "Teen" age >= 20 && age <= 64 -> "Adult" age >= 65 -> "Senior" else -> "Unknown" } -> Option B
  5. Quick Check:

    Use condition checks inside when for flexible ranges [OK]
Hint: Use condition checks inside when for complex ranges [OK]
Common Mistakes:
  • Using invalid range syntax without 'in'
  • Not handling unexpected values with else
  • Limiting ranges incorrectly or missing conditions
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