Context receivers — это экспериментальная фича Kotlin, которая позволяет функциям объявлять несколько требуемых контекстов (receivers), от которых они зависят — без вложенности и без передачи их в качестве явных параметров.
Традиционные подходы заставляют тебя либо:
with() блоки, снижая читаемостьthis receiver, ограничивая выразительностьContext receivers решают эту проблему, позволяя функции неявно получать доступ сразу к нескольким receivers.
Ты объявляешь требуемые контексты, используя синтаксис context(...) перед сигнатурой функции:
context(Logger, Database)
fun processUser(id: Int) {
log("Processing user $id") // from Logger
val user = findUser(id) // from Database
}
Чтобы вызвать эту функцию, оба экземпляра Logger и Database должны быть в области видимости:
with(logger) {
with(database) {
processUser(42)
}
}
context(...) не то же самое, что extension receivers — они не могут быть использованы с thisContext receivers особенно хороши в многоуровневом DSL-дизайне и функциональной композиции, когда несколько неявных возможностей должны быть доступны одновременно без ущерба для читаемости.
Context receivers позволяют функции неявно получать доступ к нескольким контекстам без необходимости передавать их как явные параметры или вкладывать в несколько with() блоков.
Новый — ещё не проверен сообществом
Вы