When Keyword In Kotlin

How To Articles

In Kotlin, the when keyword is a powerful and versatile control flow construct that offers a concise way to handle complex conditional logic. As someone who has been working with Kotlin for quite some time, I have found the when keyword to be one of the most valuable features of the language.

One of the things I truly appreciate about Kotlin is its ability to make code more readable and expressive. The when keyword allows me to write clean and concise code by replacing lengthy if-else chains or switch statements.

Basic Usage

The basic syntax of the when keyword in Kotlin is straightforward. It starts with the keyword itself, followed by a set of parentheses containing an expression to be evaluated. Then, we use the -> symbol to define the corresponding block of code to execute based on the evaluated expression.

Here is an example to demonstrate the basic usage of the when keyword:

val dayOfWeek = 3
when (dayOfWeek) {
1 -> print("Monday")
2 -> print("Tuesday")
3 -> print("Wednesday")
4 -> print("Thursday")
5 -> print("Friday")
else -> print("Weekend")

When the code is executed, it evaluates the value of dayOfWeek and executes the corresponding block of code. In this example, it will print “Wednesday”. If none of the cases match, the else block will be executed.

Expression Matching

One aspect of the when keyword that makes it particularly powerful is its ability to match expressions. This means we can use more complex conditions, such as checking for ranges or multiple conditions.

For example, we can use the in keyword to check if a value falls within a specific range:

val age = 25
when (age) {
in 1..17 -> print("Minor")
in 18..64 -> print("Adult")
else -> print("Senior")

In this example, if the value of age is between 1 and 17, it will print “Minor”. If the value is between 18 and 64, it will print “Adult”. Otherwise, it will print “Senior”.

Smart Casting

The when keyword in Kotlin also allows for smart casting, which means that within each branch of the when statement, the compiler knows the type of the object being checked. This eliminates the need for explicit casting and makes the code more concise and readable.

Here is an example to demonstrate smart casting:

val shape: Shape = Circle()
when (shape) {
is Circle -> shape.radius
is Rectangle -> shape.width * shape.height
else -> throw IllegalArgumentException("Unknown shape")

In this example, the when statement checks the type of the shape object and performs the corresponding operations based on its type. We don’t need to explicitly cast shape to a Circle or Rectangle because of smart casting.


The when keyword in Kotlin is a powerful tool for handling complex conditional logic in a concise and readable manner. Its ability to match expressions, use smart casting, and replace lengthy if-else chains makes it a valuable feature of the language.

Personally, I have found the when keyword to be a game-changer in my Kotlin coding journey. It has not only improved the readability of my code but also made it more expressive and easier to maintain.

If you haven’t already, I highly recommend giving the when keyword a try in your Kotlin projects. Once you get the hang of it, you’ll wonder how you ever managed without it!