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.❤7👍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 3
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🔥4😱1
Kotlin Meta
Почему Compose это не UI фреймворк Завтра, во вторник, мы проведём стрим про Compose и посмотрим на то, что на самом деле из себя представляет эта технология. На стриме узнаем: • Почему Compose это не UI фреймворк (не путать с compose-ui)? • Как отрисовать…
ComposeNode<StreamNode, Applier<FeedBack>>
Anonymous Poll
12%
Стрим интересный, удалось посмотреть
15%
Тема стрима интересна, не удалось раскрыть
56%
Тема стрима интересна, жду записи
6%
Тема стрима мне не нравится
12%
Я и сам своего рода стример
Уже вовсю выходят беты для Kotlin 2.3, а это значит, что у нас появилось отличная возможность ретроспективно взглянуть на Kotlin 2.2. Какие фичи были добавлены, какие планируются, что обсуждается с сообществом. Присоединяйтесь на стрим и узнайте.
Это тестовый стрим новой рубрики, возможно в будущем мы регулярно будем проводить такие стримы с ретроспективным анализом при завершении цикла версии Kotlin (примерно 2 раза в год).
📅 Вторник, 28 октября в 17:00 МСК
Please open Telegram to view this post
VIEW IN TELEGRAM
Продолжаем амбассадорить сообщество Kotlin Russia
Следующий ламповый митап запланирован на 14 ноября в 19:00. Будет 2 доклада:
• 19:05 Kotlin backend: используем котлин на все 100% – Анжелика Походун, Лемана Тех
• 20:15 Корутины для начинающих – Глеб Минаев, Центр научного программирования
На митапе буду я (@y9san9). Приходите пообщаться! А если кому-то не хватает наших стримов, то обещают сделать стрим и записи докладов.
Подробнее
Следующий ламповый митап запланирован на 14 ноября в 19:00. Будет 2 доклада:
• 19:05 Kotlin backend: используем котлин на все 100% – Анжелика Походун, Лемана Тех
• 20:15 Корутины для начинающих – Глеб Минаев, Центр научного программирования
На митапе буду я (@y9san9). Приходите пообщаться! А если кому-то не хватает наших стримов, то обещают сделать стрим и записи докладов.
Подробнее
👍7 1
Media is too big
VIEW IN TELEGRAM
Запись стрима про Compose Compiler. Узнали про разницу между compose ui и compose compiler, для чего ещё можно применять compose compiler и много чего ещё!
YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍2
JSpecify аннотации
Platform types уже довольно долгое время являются головной болью для Kotlin- и Java-разработчиков. Чтобы понять проблему достаточно взглянуть на код с картинки.
Именно с этой целью были созданы специальные аннотации для Java API, с помощью которых можно обозначить nullness всех возможных типов в коде.
В качестве примера можно взять следующий интерфейс на Java, в котором нет аннотаций:
Здесь каждый тип будет являться platform type. С этой целью был создан проект JSpecify, который призван создать стандартизированные аннотации для Java кода для обозначения nullability типов:
На самом деле подобные аннотации уже давно существуют, однако с ними есть ряд проблем. Большинcтво из них довольно стары, а некоторые были созданы специально для nullness analysis инструментов. И зачастую у всех аннотаций разная семантика — например, какое поведение по умолчанию устанавливается для полей, когда у них нет аннотации.
И все эти проблемы как раз решает JSpecify при помощи стандартизации всех возможных аннотаций. В JSpecify Working Group присоединилось довольно много компаний, например, Square, Google, JetBrains — все они для своих библиотек используют аннотации JSpecify.
Подробнее про эти аннотации можно посмотреть в видео на канале Kotlin by JetBrains.
Platform types уже довольно долгое время являются головной болью для Kotlin- и Java-разработчиков. Чтобы понять проблему достаточно взглянуть на код с картинки.
Именно с этой целью были созданы специальные аннотации для Java API, с помощью которых можно обозначить nullness всех возможных типов в коде.
В качестве примера можно взять следующий интерфейс на Java, в котором нет аннотаций:
interface Simple {
// returns String!
String method1();
// returns List<String!>!
List<String> method2();
}
Здесь каждый тип будет являться platform type. С этой целью был создан проект JSpecify, который призван создать стандартизированные аннотации для Java кода для обозначения nullability типов:
interface Simple {
// returns String
@NonNull String method1();
// returns List<String?>
@NonNull List<@Nullable String> method2();
}
На самом деле подобные аннотации уже давно существуют, однако с ними есть ряд проблем. Большинcтво из них довольно стары, а некоторые были созданы специально для nullness analysis инструментов. И зачастую у всех аннотаций разная семантика — например, какое поведение по умолчанию устанавливается для полей, когда у них нет аннотации.
И все эти проблемы как раз решает JSpecify при помощи стандартизации всех возможных аннотаций. В JSpecify Working Group присоединилось довольно много компаний, например, Square, Google, JetBrains — все они для своих библиотек используют аннотации JSpecify.
Подробнее про эти аннотации можно посмотреть в видео на канале Kotlin by JetBrains.
Первый коммит в Kotlin был сделан 15 лет назад
Летом Kotlin исполнилось 14 лет, о чём мы уже писали. Но 14 лет назад была выпущена первая версия, а ровно 15 лет назад Андрей Бреслав сделал первый коммит в репозиторий.
Язык изначально назывался Jet. Если глянуть в сорцы коммита, можно увидеть множество файлов .jetl (jetbrains language) — изначального названия языка.
Летом Kotlin исполнилось 14 лет, о чём мы уже писали. Но 14 лет назад была выпущена первая версия, а ровно 15 лет назад Андрей Бреслав сделал первый коммит в репозиторий.
Язык изначально назывался Jet. Если глянуть в сорцы коммита, можно увидеть множество файлов .jetl (jetbrains language) — изначального названия языка.
Kotlin Meta
Вышла запись стрима с разбором того, что нового накопилось в Kotlin за последние полгода. Если формат покажет себя хорошо, то будем периодически делать такие выпуски.
YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM