Введение во встраивание функций в Kotlin
Лямбду часто передают в функцию как короткий блок действий. Компилятор может не вызывать такую функцию обычным способом, а развернуть ее код в точке вызова. Такой прием называют встраиванием функций.
Функцию, которую разрешают разворачивать, помечают
словом inline перед fun. Если у нее
есть параметр-лямбда, тело лямбды тоже может
оказаться рядом с вызывающим кодом, а не жить
отдельно.
Пусть есть обертка: сначала короткое сообщение, затем переданный блок, затем снова сообщение. Объявление выглядит так:
inline fun around(block: () -> Unit) {
println("start")
block()
println("finish")
}
При вызове компилятор подставляет команды из тела
around и из лямбды на место этой строки.
Проверить порядок можно простым примером:
fun main() {
around {
println("work")
}
}
На выходе идут четыре строки: границы из функции и одна строка из блока между ними. Логика читается как обычная последовательность команд, хотя снаружи осталась короткая запись с лямбдой.
Встраивание не меняет смысл программы для читателя: это способ компилятора убрать лишний слой вызова и сделать лямбду ближе к месту, где она нужна.