Kotlin Meta
322 subscribers
79 photos
4 videos
1 file
76 links
Всякое разное интересное про язык программирования Kotlin и около него.

Чатик: @kotlinmetachat.
Мы на YouTube: https://youtube.com/@KotlinMeta.
Мы на Twitch: https://twitch.tv/kotlinmeta.
Download Telegram
inline функции не для оптимизаций

Главным заблуждением является то, что ключевое слово inline следует применять к функциям тогда, когда необходимо оптимизировать скорость кода. Но тогда встаёт вопрос: а почему не использовать это ключевое слово везде? Или почему разработчики языка не сделали инлайнинг всех функций по умолчанию?

На самом деле JVM именно этим и занимается в runtime для оптимизаций. Однако помимо самого инлайнинга есть ещё дополнительные фичи, ради которых можно явно воспользоваться модификатором inline.
6😁1
Kotlin Meta
inline функции не для оптимизаций Главным заблуждением является то, что ключевое слово inline следует применять к функциям тогда, когда необходимо оптимизировать скорость кода. Но тогда встаёт вопрос: а почему не использовать это ключевое слово везде? Или…
non-local returns / нелокальные возвраты

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/какой-либо другой контекст стороны вызова в код передаваемой лямбды. Именно благодаря этому, к примеру, в map мы можем вызывать suspend функции, несмотря на то, что лямбда, которую она принимает не передаётся с ключевым словом suspend.
7👍4🔥2
Kotlin Meta
suspend/composable/etc context propagation Также inline-функции позволяют распространить suspend/composable/какой-либо другой контекст стороны вызова в код передаваемой лямбды. Именно благодаря этому, к примеру, в map мы можем вызывать suspend функции, несмотря…
реификация типов

В 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
73
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.
63🤝2
Kotlin Meta
noinline, crossinline и ограничения inline-лямбд Инлайнинг лямбды можно отключить при помощи ключевого слово noinline, тогда её можно использовать как обычную лямбду. Иногда может потребоваться встроить лямбду и отключить дополнительные фичи (non-local returns)…
в inline функциях есть доступ к членам своего уровня видимости

У inline-функций нет доступа к private/internal членам в их зоне видимости. Однако эту проблему можно решить аннотацией PublishedApi. При этом необходимо учитывать, что объявление с аннотацией становится "effectively public" (фактически в байт-коде оно становится публичным) и это влияет на бинарную совместимость.
4👍2
Kotlin Meta
в inline функциях есть доступ к членам своего уровня видимости У inline-функций нет доступа к private/internal членам в их зоне видимости. Однако эту проблему можно решить аннотацией PublishedApi. При этом необходимо учитывать, что объявление с аннотацией…
inline-свойства

Свойства также могут быть inline. Если быть точнее, инлайнятся их геттеры/сеттеры. И у таких свойств не может быть backing fields. В KEEP к inline свойствам можно почитать дискуссию про эту фичу и посмотреть на примеры.
53
This media is not supported in your browser
VIEW IN TELEGRAM
📹 Kotlin Scripting: используем Kotlin как замену Bash

Запись стрима про Kotlin Scripting. Мы уже ранее немного затрагивали эту тему на стриме про плагины и AIDL, а теперь разберемся с скриптами на конкретном примере.

Узнаем, как под капотом работает Gradle Kotlin DSL и как создать такой же DSL самому. Как подключать зависимости и писать код без билд-системы, и какое у этого всего будущее.

YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥411
Почему Compose это не UI фреймворк

Завтра, во вторник, мы проведём стрим про Compose и посмотрим на то, что на самом деле из себя представляет эта технология. На стриме узнаем:

• Почему Compose это не UI фреймворк (не путать с compose-ui)?
• Как отрисовать compose в html (или даже в терминале)?
• Как написать вьюмодель на compose?
• Что делает androidx в кроссплатформенном фреймворке

📅 Вторник, 14 октября в 17:00 МСК
11👍17🔥4😱1
Live stream started
Live stream finished (2 hours)
🏝 Что накопилось в Kotlin 2.2

Уже вовсю выходят беты для Kotlin 2.3, а это значит, что у нас появилось отличная возможность ретроспективно взглянуть на Kotlin 2.2. Какие фичи были добавлены, какие планируются, что обсуждается с сообществом. Присоединяйтесь на стрим и узнайте.

Это тестовый стрим новой рубрики, возможно в будущем мы регулярно будем проводить такие стримы с ретроспективным анализом при завершении цикла версии Kotlin (примерно 2 раза в год).

📅 Вторник, 28 октября в 17:00 МСК
Please open Telegram to view this post
VIEW IN TELEGRAM
142
Live stream started
Live stream finished (2 hours)
Продолжаем амбассадорить сообщество Kotlin Russia

Следующий ламповый митап запланирован на 14 ноября в 19:00. Будет 2 доклада:

• 19:05 Kotlin backend: используем котлин на все 100% – Анжелика Походун, Лемана Тех
• 20:15 Корутины для начинающих – Глеб Минаев, Центр научного программирования

На митапе буду я (@y9san9). Приходите пообщаться! А если кому-то не хватает наших стримов, то обещают сделать стрим и записи докладов.

Подробнее
👍71