Функция also
Функция also является стандартной функцией-расширением в Kotlin, которая позволяет выполнить дополнительные действия с объектом в цепочке вызовов. Она принимает лямбда-выражение с получателем, в котором можно выполнить побочные операции, и возвращает исходный объект без изменений.
Синтаксис
inline fun <T> T.also(block: (T) -> Unit): T
Пример
Использование also для логирования перед выполнением операции:
val numbers = mutableListOf(1, 2, 3)
val modified = numbers.also {
println("Before modification: $it")
}.add(4)
println(numbers)
Результат выполнения кода:
Before modification: [1, 2, 3]
[1, 2, 3, 4]
Пример
Использование also для инициализации свойств объекта:
class Person {
var name: String = ""
var age: Int = 0
}
val person = Person().also {
it.name = "Alice"
it.age = 25
}
println("${person.name}, ${person.age}")
Результат выполнения кода:
Alice, 25
Пример
Использование also для отладки промежуточных результатов:
val result = (1..10)
.map { it * 2 }
.also { println("After map: $it") }
.filter { it > 10 }
.also { println("After filter: $it") }
.sum()
println("Final result: $result")
Результат выполнения кода:
After map: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
After filter: [12, 14, 16, 18, 20]
Final result: 80
Пример
Использование also для выполнения побочных эффектов:
val file = File("example.txt").also {
if (!it.exists()) {
it.createNewFile()
}
}
println("File exists: ${file.exists()}")
Результат выполнения кода:
File exists: true