Overview
The also()
function is a scope function that was introduced in Kotlin 1.1.
Example
val size = "Hello".also {
println(it)
}.length
In this example, the string “Hello” is printed, and then its length is assigned to the size
variable.
Characteristics
When the also()
extension function executes:
- the receiver object that
.also()
is called upon is available as the lambda argument - by default, namedit
- the result will be the receiver object
Create, Pass, and Evaluate
A prime use case for also()
is the pattern where you need to pass an empty object to another function for initialization. For example, to get the DisplayMetrics
in Android, you create a new DisplayMetrics
object, and pass it into the getMetrics()
method. Then afterward you can evaluate the properties on it.
// Create the object
DisplayMetrics metrics = new DisplayMetrics();
// Pass it to getMetrics(), which sets the values on it
activity.getWindowManager()
.getDefaultDisplay()
.getMetrics(metrics);
// Evaluate the property
System.out.println(metrics.density);
Kotlin’s also()
method simplifies this pattern:
println(DisplayMetrics().also {
activity.windowManager
.defaultDisplay
.getMetrics(it)
}.density)
Alternatives
To help you decide between the different scope functions, take a look at the guide, Understanding Kotlin’s let(), also(), run(), and apply().