StartAndroid
10.3K subscribers
385 photos
10 videos
5 files
1.83K links
Канал об Android (Андроид) разработке

Сайт - http://startandroid.ru

Чат - https://tttttt.me/startandroidchat

Контакты - https://startandroid.ru/ru/about/cntct5.html

Реклама - https://startandroid.ru/ru/about/reklama.html

РКН - https://shorturl.at/p7iUr
Download Telegram
Вышел 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/
👍44🔥6🤔61🥰1