Вышел Kotlin 1.6.20. Одна из интересных новых фич - context receivers.
На словах объяснить непросто, но можно рассмотреть простой пример: внутри нашего кастомного View класса нам понадобилась функция конвертирования dp в px. На скриншоте выше - два варианта реализации.
Первый вариант - обычная Extension функция для Float. Внутри класса View мы сможем ее вызвать и передать ей this, чтобы она получила доступ к resources и все посчитала.
Второй вариант - использует context receivers. Оператором context мы даем этой Extension функции понять, что она будет вызвана внутри контекста View класса.
Как попасть в контекст View класса?
В нашем случае мы просто будем вызывать эту функцию внутри нашего View класса. Она сама вытянет из него resources. Нам уже не надо будет явно передавать view в функцию, как мы это делали в первом варианте.
Еще один способ попасть в контекст View класса - with(view) { ... }. В блоке кода оператора with мы сможем вызывать нашу функцию dpToPx() и она сама доберется до view, который мы передали в with().
Если же попытаться вызвать такую функцию вне контекста View, то студия выдаст ошибку: No required context receiver found.
#kotlin #extension #receiver
https://blog.jetbrains.com/kotlin/2022/04/kotlin-1-6-20-released/
На словах объяснить непросто, но можно рассмотреть простой пример: внутри нашего кастомного View класса нам понадобилась функция конвертирования dp в px. На скриншоте выше - два варианта реализации.
Первый вариант - обычная Extension функция для Float. Внутри класса View мы сможем ее вызвать и передать ей this, чтобы она получила доступ к resources и все посчитала.
Второй вариант - использует context receivers. Оператором context мы даем этой Extension функции понять, что она будет вызвана внутри контекста View класса.
Как попасть в контекст View класса?
В нашем случае мы просто будем вызывать эту функцию внутри нашего View класса. Она сама вытянет из него resources. Нам уже не надо будет явно передавать view в функцию, как мы это делали в первом варианте.
Еще один способ попасть в контекст View класса - with(view) { ... }. В блоке кода оператора with мы сможем вызывать нашу функцию dpToPx() и она сама доберется до view, который мы передали в with().
Если же попытаться вызвать такую функцию вне контекста View, то студия выдаст ошибку: No required context receiver found.
#kotlin #extension #receiver
https://blog.jetbrains.com/kotlin/2022/04/kotlin-1-6-20-released/
👍44🔥6🤔6❤1🥰1