Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpBdRc 26 of 299 menu
◀ ▶

Лямбда с получателем в Kotlin

У обычной лямбды параметры перечисляют в скобках. У лямбды с получателем контекст задают в типе слева от точки: объект подставляется как this, а не как аргумент it.

Запись StringBuilder.() -> Unit означает блок без аргументов, который выполняется на экземпляре StringBuilder. Внутри доступны append, appendLine и другие методы буфера:

fun logLine(block: StringBuilder.() -> Unit): String { val buffer = StringBuilder() buffer.block() return buffer.toString() }

Вызов похож на набор команд у объекта. Ключевое слово this можно опустить и писать только имя метода:

fun main() { val line = logLine { append("user=") append("ann") appendLine() append("role=editor") } println(line) }

Тот же тип получателя удобно передавать дальше, когда несколько функций настраивают один буфер по очереди:

fun StringBuilder.prefix(block: StringBuilder.() -> Unit) { append("[") block() append("]") } fun main() { val text = logLine { prefix { append("v1") } } println(text) }

Напишите функцию, которая принимает StringBuilder.() -> Unit и возвращает строку из двух частей "start:" и ":end" вокруг текста блока.

В блоке добавьте две строки через appendLine и выведите итог. Между строками не должно быть лишних символов, кроме перевода строки.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить