Skip to content
DeveloperMemos

Understanding Kotlin's run Function

Kotlin, Functions, Programming1 min read

Let's just get straight into it! The basic syntax of the run function is as follows:

1run {
2 // Code block
3}

You can also use it with an object:

1myObject.run {
2 // Code block
3}

Executing Code within Context

The primary purpose of the run function is to execute a block of code within the context of an object. This means that you can access the properties and methods of the object directly inside the code block without having to qualify them explicitly. Let's take a look at an example to understand this better.

Suppose we have a Person class representing a person's details such as name and age. We can create an instance of the Person class and use the run function to perform some operations on it:

1class Person(val name: String, var age: Int)
2
3val person = Person("John Doe", 30)
4
5person.run {
6 println("Name: $name") // Accessing name property directly
7 age += 1 // Modifying age property directly
8}
9
10println("Updated Age: ${person.age}") // Output: Updated Age: 31

In the example above, we create a person object of type Person. By using the run function, we can directly access the name property and modify the age property within the code block.

Return Value

The run function returns the result of the last expression within the code block. This allows you to perform operations and return a value from the block.

1val result = person.run {
2 val greeting = "Hello, $name!"
3 val nextYearAge = age + 1
4
5 "$greeting Next year, you'll be $nextYearAge years old."
6}
7
8println(result) // Output: Hello, John Doe! Next year, you'll be 31 years old.

In the example above, we use the run function to construct a greeting message and calculate the person's age for the next year. The final value of the result variable is then printed, which includes both the greeting and the age calculation.

Nullable Receiver

The run function is also useful when dealing with nullable objects. If the object is null, the code block won't be executed, and the result of the run function will be null as well.

1val nullablePerson: Person? = null
2
3nullablePerson?.run {
4 println("Name: $name") // Won't be executed
5 age += 1 // Won't be executed
6} ?: run {
7 println("Person is null")
8}

In the example above, we attempt to access the properties of the nullablePerson object within the run block. Since the object is null, the code block inside run won't be executed. Instead, we use the Elvis operator (?:) with another run block to print a message indicating that the person is null.

Conclusion

The run function in Kotlin is a powerful tool for executing code within the context of an object. It allows you to access properties and methods of the object directly, perform operations, and return results. Understanding and utilizing the run function can greatly enhance your Kotlin programming skills. Experiment with it in your Android development projects and discover its full potential.