Using When Expression as a Powerful Switch in Kotlin
📖 Scenario: You are building a simple program that tells the type of a day based on its name. This is like a calendar helper that categorizes days into weekdays or weekends.
🎯 Goal: Build a Kotlin program that uses the when expression to check the name of a day and print whether it is a weekday or weekend.
📋 What You'll Learn
Create a variable with the exact name day and assign it the string value "Monday".
Create a variable with the exact name weekendDays that holds a list of weekend day names: "Saturday" and "Sunday".
Use a when expression with the variable day to check if it is a weekend or a weekday.
Print the exact output "Monday is a Weekday" or similar for the given day.
💡 Why This Matters
🌍 Real World
This kind of day categorization is useful in calendar apps, scheduling software, or any program that needs to treat weekdays and weekends differently.
💼 Career
Understanding <code>when</code> expressions helps you write clear and concise decision-making code, a common task in software development.
Progress0 / 4 steps
1
Create the day variable
Create a variable called day and set it to the string "Monday".
Kotlin
Hint
Use val day = "Monday" to create the variable.
2
Create the weekendDays list
Create a variable called weekendDays and assign it a list containing the strings "Saturday" and "Sunday".
Kotlin
Hint
Use listOf("Saturday", "Sunday") to create the list.
3
Use when expression to check the day type
Use a when expression with the variable day to check if it is in weekendDays. If yes, assign the string "Weekend" to a variable called dayType. Otherwise, assign "Weekday".
Kotlin
Hint
Use when (day) { in weekendDays -> "Weekend" else -> "Weekday" }.
4
Print the result
Print the message in the format: "Monday is a Weekday" using the variables day and dayType with a Kotlin println statement and string template.
Kotlin
Hint
Use println("$day is a $dayType") to print the message.
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
Step 1: Understand the role of when
The when expression is used to choose between different actions depending on the value it checks.
Step 2: Compare with other options
The other options describe loops, functions, and variables, which are unrelated to when.
Final Answer:
To select actions based on different values, like a switch statement -> Option C
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
Step 1: Identify Kotlin when syntax
The correct syntax uses when (x) { value -> action } with arrows and braces.
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.
Final Answer:
when (x) { 1 -> println("One") 2 -> println("Two") else -> println("Other") } -> Option D
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
Step 1: Check the value of x
The variable x is 3.
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.
Final Answer:
Medium -> Option A
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
Step 1: Check when syntax
The when expression requires parentheses around the variable: when (y).
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.
Final Answer:
Missing parentheses around y in when -> Option A
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
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.
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.
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.
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
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 unknownstrongwhile earning +1 Grip toward your certificate.