Context Receivers
06.10.2023 | https://www.droidcon.com/2023/10/06/getting-ready-for-kotlin-context-receivers/ |
26.03.2024 | https://habr.com/ru/companies/ozontech/articles/802641/ |
Новая функция, которая позволяет указывать несколько контекстов для функции или метода, предоставляя более гибкие возможности для создания функций, которым требуется доступ к нескольким внешним объектам или интерфейсам. Эта концепция особенно полезна, когда функции зависят от нескольких контекстов и вам нужно явно указать, какие контексты могут влиять на выполнение функции. Context Receivers позволяют вам определить несколько контекстов, необходимых для выполнения функции, и использовать их напрямую без явного указания в параметрах.
// Здесь performQueryWithLogging объявлена с двумя контекстными ресиверами: Database и Logger.
// В теле функции вы можете использовать методы обоих объектов напрямую, не передавая их явно через параметры.
class Database {
fun query(query: String): List<String> = listOf("Result 1", "Result 2")
}
class Logger {
fun log(message: String) {
println(message)
}
}
// Функция зависит от двух контекстов: Database и Logger
context(Database, Logger)
fun performQueryWithLogging(query: String) {
log("Executing query: $query") // Вызов метода из Logger
val result = query(query) // Вызов метода из Database
log("Query result: $result") // Вызов метода из Logger
}
Kotlin Context Receivers. Вопросы на собесе
- Что такое Context Receivers в Kotlin и как они работают?
- Чем Context Receivers отличаются от традиционных способов передачи контекста, таких как параметры функции или использование with?