На этом стриме мы разобрали библиотеку Arrow, написали проект и обсудили удобство и выразительность функционального подхода на Kotlin.
Заходите, смотрите и пишите комментарии, если хотите что-то добавить или с чем-то не согласны. Скоро будет анонс нового стрима, так что следите за анонсами и пишите фидбек!
YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7 5💘2🔥1👾1
🔴 Kotlin Scripting: используем Kotlin как замену Bash
Присоединяйтесь на стрим в воскресенье. Тема - Kotlin Scripting. Мы уже ранее немного затрагивали эту тему на стриме про плагины и AIDL, а на этом стриме разберемся с скриптами на конкретном примере.
Узнаем, как под капотом работает Gradle Kotlin DSL и как создать такой же DSL самому. Как подключать зависимости и писать код без билд-системы, и какое у этого всего будущее.
📆 28 сентября (вс) ⏳ 17:00
Telegram | YouTube | Twitch
Присоединяйтесь на стрим в воскресенье. Тема - Kotlin Scripting. Мы уже ранее немного затрагивали эту тему на стриме про плагины и AIDL, а на этом стриме разберемся с скриптами на конкретном примере.
Узнаем, как под капотом работает Gradle Kotlin DSL и как создать такой же DSL самому. Как подключать зависимости и писать код без билд-системы, и какое у этого всего будущее.
Telegram | YouTube | Twitch
Please open Telegram to view this post
VIEW IN TELEGRAM
Зачем нужны инлайн-функции?
Anonymous Poll
38%
Чтобы увеличить скорость кода
30%
Для возможности нелокального возврата из передаваемой лямбды
7%
Для suspend context propagation
35%
Для отмены стирания дженериков
9%
Чтобы увеличить размер байт-кода
7%
Для запрета возможности сохранить передаваемую лямбду
55%
Я инлайн-функция
inline функции не для оптимизаций
Главным заблуждением является то, что ключевое слово inline следует применять к функциям тогда, когда необходимо оптимизировать скорость кода. Но тогда встаёт вопрос: а почему не использовать это ключевое слово везде? Или почему разработчики языка не сделали инлайнинг всех функций по умолчанию?
На самом деле JVM именно этим и занимается в runtime для оптимизаций. Однако помимо самого инлайнинга есть ещё дополнительные фичи, ради которых можно явно воспользоваться модификатором
Главным заблуждением является то, что ключевое слово inline следует применять к функциям тогда, когда необходимо оптимизировать скорость кода. Но тогда встаёт вопрос: а почему не использовать это ключевое слово везде? Или почему разработчики языка не сделали инлайнинг всех функций по умолчанию?
На самом деле JVM именно этим и занимается в runtime для оптимизаций. Однако помимо самого инлайнинга есть ещё дополнительные фичи, ради которых можно явно воспользоваться модификатором
inline
.❤5😁1
Kotlin Meta
inline функции не для оптимизаций Главным заблуждением является то, что ключевое слово inline следует применять к функциям тогда, когда необходимо оптимизировать скорость кода. Но тогда встаёт вопрос: а почему не использовать это ключевое слово везде? Или…
non-local returns / нелокальные возвраты
inline-функции позволяют делать нелокальный возврат из лямбд, которые передаются в функцию. Самый популярный юзкейс — возврат из extension-функций к коллекциям:
inline-функции позволяют делать нелокальный возврат из лямбд, которые передаются в функцию. Самый популярный юзкейс — возврат из extension-функций к коллекциям:
fun test() {
val range = 1..10
range.forEach {
if (it == 8) return
println(it)
}
}
❤7
Kotlin Meta
non-local returns / нелокальные возвраты inline-функции позволяют делать нелокальный возврат из лямбд, которые передаются в функцию. Самый популярный юзкейс — возврат из extension-функций к коллекциям: fun test() { val range = 1..10 range.forEach…
suspend/composable/etc context propagation
Также inline-функции позволяют распространить suspend/composable/какой-либо другой контекст стороны вызова в код передаваемой лямбды. Именно благодаря этому, к примеру, в
Также inline-функции позволяют распространить suspend/composable/какой-либо другой контекст стороны вызова в код передаваемой лямбды. Именно благодаря этому, к примеру, в
map
мы можем вызывать suspend функции, несмотря на то, что лямбда, которую она принимает не передаётся с ключевым словом suspend
.❤6👍4🔥2
Kotlin Meta
suspend/composable/etc context propagation Также inline-функции позволяют распространить suspend/composable/какой-либо другой контекст стороны вызова в код передаваемой лямбды. Именно благодаря этому, к примеру, в map мы можем вызывать suspend функции, несмотря…
реификация типов
В Kotlin присутствует стирание типов в compile-time. Это значит, что все дженерики будут выглядеть в runtime одинаково и в следующем коде будет ошибка:
Однако с inline функциями можно пометить тип как reified и этот код уже скомпилируется:
В Kotlin присутствует стирание типов в compile-time. Это значит, что все дженерики будут выглядеть в runtime одинаково и в следующем коде будет ошибка:
fun <T> checkType(item: Any): Boolean = item is T
// err: cannot check for instance of erased type T
Однако с inline функциями можно пометить тип как reified и этот код уже скомпилируется:
inline fun <reified T> checkType(item: Any): Boolean = item is T
❤7 2
Kotlin Meta
реификация типов В Kotlin присутствует стирание типов в compile-time. Это значит, что все дженерики будут выглядеть в runtime одинаково и в следующем коде будет ошибка: fun <T> checkType(item: Any): Boolean = item is T // err: cannot check for instance…
noinline, crossinline и ограничения inline-лямбд
Инлайнинг лямбды можно отключить при помощи ключевого слово
Инлайнинг лямбды можно отключить при помощи ключевого слово
noinline
, тогда её можно использовать как обычную лямбду. Иногда может потребоваться встроить лямбду и отключить дополнительные фичи (non-local returns), тогда можно использоваться ключевое слово crossinline
.❤6 3🤝2
Kotlin Meta
noinline, crossinline и ограничения inline-лямбд Инлайнинг лямбды можно отключить при помощи ключевого слово noinline, тогда её можно использовать как обычную лямбду. Иногда может потребоваться встроить лямбду и отключить дополнительные фичи (non-local returns)…
в inline функциях есть доступ к членам своего уровня видимости
У inline-функций нет доступа к private/internal членам в их зоне видимости. Однако эту проблему можно решить аннотацией
У inline-функций нет доступа к private/internal членам в их зоне видимости. Однако эту проблему можно решить аннотацией
PublishedApi
. При этом необходимо учитывать, что объявление с аннотацией становится "effectively public" (фактически в байт-коде оно становится публичным) и это влияет на бинарную совместимость.❤4👍2
Kotlin Meta
в inline функциях есть доступ к членам своего уровня видимости У inline-функций нет доступа к private/internal членам в их зоне видимости. Однако эту проблему можно решить аннотацией PublishedApi. При этом необходимо учитывать, что объявление с аннотацией…
inline-свойства
Свойства также могут быть inline. Если быть точнее, инлайнятся их геттеры/сеттеры. И у таких свойств не может быть backing fields. В KEEP к inline свойствам можно почитать дискуссию про эту фичу и посмотреть на примеры.
Свойства также могут быть inline. Если быть точнее, инлайнятся их геттеры/сеттеры. И у таких свойств не может быть backing fields. В KEEP к inline свойствам можно почитать дискуссию про эту фичу и посмотреть на примеры.
❤5 3
This media is not supported in your browser
VIEW IN TELEGRAM
Запись стрима про Kotlin Scripting. Мы уже ранее немного затрагивали эту тему на стриме про плагины и AIDL, а теперь разберемся с скриптами на конкретном примере.
Узнаем, как под капотом работает Gradle Kotlin DSL и как создать такой же DSL самому. Как подключать зависимости и писать код без билд-системы, и какое у этого всего будущее.
YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥4 1 1
Почему Compose это не UI фреймворк
Завтра, во вторник, мы проведём стрим про Compose и посмотрим на то, что на самом деле из себя представляет эта технология. На стриме узнаем:
• Как отрисовать compose в html (или даже в терминале)?
• Как написать вьюмодель на compose?
• Что делает androidx в кроссплатформенном фреймворке
📅 Вторник, 14 октября в 17:00 МСК
Завтра, во вторник, мы проведём стрим про Compose и посмотрим на то, что на самом деле из себя представляет эта технология. На стриме узнаем:
• Почему Compose это не UI фреймворк (не путать с compose-ui
)?• Как отрисовать compose в html (или даже в терминале)?
• Как написать вьюмодель на compose?
• Что делает androidx в кроссплатформенном фреймворке
📅 Вторник, 14 октября в 17:00 МСК
11👍17🔥3😱1
Kotlin Meta
Почему Compose это не UI фреймворк Завтра, во вторник, мы проведём стрим про Compose и посмотрим на то, что на самом деле из себя представляет эта технология. На стриме узнаем: • Почему Compose это не UI фреймворк (не путать с compose-ui)? • Как отрисовать…
ComposeNode<StreamNode, Applier<FeedBack>>
Anonymous Poll
13%
Стрим интересный, удалось посмотреть
13%
Тема стрима интересна, не удалось раскрыть
59%
Тема стрима интересна, жду записи
3%
Тема стрима мне не нравится
13%
Я и сам своего рода стример