Explicit Backing Fields: новая итерация
Когда мы хотим объявить некоторую изменяющуюся сущность с приватным доступом в рамках класса и при этом сделать дублирующее поле, которое позволяет получить публичный доступ к полю извне только для чтения, мы обычно писали два поля.
И по аналогии с неявными теневыми полями (implicit backing fields), предлагается ввести понятие "явные теневые поля". На YouTrack уже давно был proposal, о котором подробнее почитать можно тут. В нём предлагается добавить возможность переписать вышеописанный код при помощи одного поля, сократив количество кода. Но недавно началась новая итерация proposal-а, в котором слегка упростили фичу.
Когда мы хотим объявить некоторую изменяющуюся сущность с приватным доступом в рамках класса и при этом сделать дублирующее поле, которое позволяет получить публичный доступ к полю извне только для чтения, мы обычно писали два поля.
И по аналогии с неявными теневыми полями (implicit backing fields), предлагается ввести понятие "явные теневые поля". На YouTrack уже давно был proposal, о котором подробнее почитать можно тут. В нём предлагается добавить возможность переписать вышеописанный код при помощи одного поля, сократив количество кода. Но недавно началась новая итерация proposal-а, в котором слегка упростили фичу.
1 7❤2 2🎉1
Как попробовать самим?
Действительно ли фича упростит код или она просто будет ненужным сахаром, из-за которого будет сложнее войти в язык новичкам. Будет ли мешанина старых и новых подходов?
Вы можете опробовать эту фичу сами уже сейчас, для этого добавляем компиляторный флаг
Подробнее про мотивацию, предыдущие итерации и фидбек других участников сообщества можно глянуть в дискуссии на GitHub.
Действительно ли фича упростит код или она просто будет ненужным сахаром, из-за которого будет сложнее войти в язык новичкам. Будет ли мешанина старых и новых подходов?
Вы можете опробовать эту фичу сами уже сейчас, для этого добавляем компиляторный флаг
-XXLanguage:+ExplicitBackingFields
в build.gradle.kts.Подробнее про мотивацию, предыдущие итерации и фидбек других участников сообщества можно глянуть в дискуссии на GitHub.
1 6👍2 2
Две новые библиотеки
SwiftKit
и JavaKit
сделают проще вызов Java
-функций из Swift
и наоборот. Почему это интересно нам, Kotlin
-разработчикам? Ну, потому что будут всё больше распространяться новости, что Swift
идёт по пути Kotlin
и можно будет писать кроссплатформенные приложения под Java
также, как и на Kotlin
под Swift
. И это не так. В чём главное различие?
Swift
решает вопрос интеропа на уровне библиотеки. Kotlin
же – на уровне компилятора. Основной бонус, который мы из-за этого получаем, – это очень гладкая интеграция. Если в настроенном проекте есть Kotlin
и Swift
файлы, то их декларации будут общими между двумя файлами. Swift
будет видеть все функции/классы/интерфейсы Kotlin
и сможет их вызывать/реализовывать. И наоборот. Swift <-> Java Interoperability
работает по другому принципу. Для каждого вызова Java
из Swift
(и наоборот) необходимо написать специальный метод-обёртку, который работает через JNI
. Что можно было делать и раньше, но занимало больше кода. Никакой новой возможности не появлось.Это означает, что в Kotlin для использования
Swift
-библиотеки достаточно подключить её из spm
или cocoapods
. И т.к. пространство имён становится общее между Swift
и Kotlin
, никаких дополнительных действий делать не надо. И такое удобство возможно только в Kotlin
, ибо он компилируется под нужную платформу, а, соответственно, имеет доступ к пространству имён этой платформы. Swift
же не компилируется и не будет компилироваться в Java-bytecode
, а в таком варианте уровень интеропа всегда будет отставать.Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Показали основные способы реализовать возможность расширять функциональность приложения сторонними разработчиками. Посмотрели как можно сделать разработку плагинов удобнее при помощи Kotlin DSL и в целом разобрали подходы к проектированию таких вещей.
00:00 – Что за плагины мы будем смотреть?
04:22 – Схематично разбираем систему плагинов
21:40 – Рассматриваем Raycast как пример приложения с плагинами
23:34 – AIDL: объективно самый лучший способ создавать плагины
39:00 – Альтернатива Raycast от Эмиля под Android (Gester)
1:10:44 – Kotlin DSL: теория
1:17:48 – Kotlin DSL: практика
1:24:50 – Exteragram: плагины для Telegram-клиента на Python
1:28:30 – Рассматриваем плагин для поиска приложений в Gester
1:33:03 – Всем удачи, всем пока
YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6 5🔥2 2
🔴 Стрим в воскресенье в 19:00
Присоединяйтесь на стрим по обсуждению Telegram-ботов! В это воскресенье мы соберёмся не только с Эмилем, но и с специальным гостем: Лёшей Овсянниковым.
Лёша – автор библиотеки🤖 ktgbotapi, которая по моему мнению превосходит все существующие библиотеки под Kotlin в плане идиоматичности. А ещё он как-то умудряется совмещать это с фулл-тайм работой 😅️️️️️️
Напишем тестового бота, поговорим о библиотеке и о жизни опенсорс разработчика. Ставьте уведомление, делитесь с друзьями, и до встречи на стриме!
Telegram | YouTube | Twitch
Присоединяйтесь на стрим по обсуждению Telegram-ботов! В это воскресенье мы соберёмся не только с Эмилем, но и с специальным гостем: Лёшей Овсянниковым.
Лёша – автор библиотеки
Напишем тестового бота, поговорим о библиотеке и о жизни опенсорс разработчика. Ставьте уведомление, делитесь с друзьями, и до встречи на стриме!
Telegram | YouTube | Twitch
Please open Telegram to view this post
VIEW IN TELEGRAM
Как бы вы отнеслись к добавлению статиков в Kotlin? (смотрите пост ниже)
Anonymous Poll
9%
Не знаю, что такое статики
38%
Что? В Kotlin же есть компаньоны, разве статики не в Java?
38%
Понимаю, какие кейсы могут покрыть статики, но решение – затыкание дыр, а не полноценная фича
15%
Статики – нужная фича
В Kotlin всерьёз рассматривают добавление static-функций и ведут обсуждение с коммьюнити. Пропозал: здесь, обсуждение: здесь.
Основные мотивации две:
• Разрешить делать статические функции-расширения на типы без компаньона
• Разрешить создавать статические функции без необходимости создавать объект
На этом канале мы высказываем наше мнение,
Самое адекватное предложение на данный момент – преобразовать статики-затычки в органичную фичу неймспейсов. Неймспейсы (пространства имён) уже есть в Kotlin: это пространство имён внутри пакета, класса, файла или даже функции. Концепция неймспейсов будет гармонично сосуществовать с объектами, и решать вышеперечисленные проблемы.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Собираем метрики, проводим А/Б эксперименты
Anonymous Poll
14%
Стрим интересный, удалось посмотреть
0%
Тема стрима интересная, но не раскрыта полностью (предложения в комменты)
54%
Тема стрима интересная, не удалось посмотреть, жду записи в среду
14%
Тема стрима мне не интересна
17%
Я и сам своего рода стример
Dependency Injection в Ktor теперь из коробки
Не так давно вышел новый релиз ktor, в котором добавили встроенный DI. Как написано на оффициальном сайте, эту фичу довольно долго ждало комьюнити и её можно добавить к себе в виде отдельного модуля. В roadmap эту фичу можно было заметить ещё с 2024 года.
В документации появилась отдельная страница с инструкцией по использованию DI. Видно, что использовать DI можно при помощи DSL в Ktor-модулях, которые используются в ktor-server. То есть, в ktor-client мы использовать DI не сможем – но там он и не нужен.
Как мне кажется, фича реализована довольно хорошо и отлично вписывается в философию Ktor – её можно не добавлять и обильно используются фишки котлина, такие как DSL. Это нашло бы хорошее применение при написании маленьких API, в которых хочется тянуть минимально количество сторонних зависимостей и при этом иметь возможность быстро инжектить зависимости в модули.
Не так давно вышел новый релиз ktor, в котором добавили встроенный DI. Как написано на оффициальном сайте, эту фичу довольно долго ждало комьюнити и её можно добавить к себе в виде отдельного модуля. В roadmap эту фичу можно было заметить ещё с 2024 года.
В документации появилась отдельная страница с инструкцией по использованию DI. Видно, что использовать DI можно при помощи DSL в Ktor-модулях, которые используются в ktor-server. То есть, в ktor-client мы использовать DI не сможем – но там он и не нужен.
Как мне кажется, фича реализована довольно хорошо и отлично вписывается в философию Ktor – её можно не добавлять и обильно используются фишки котлина, такие как DSL. Это нашло бы хорошее применение при написании маленьких API, в которых хочется тянуть минимально количество сторонних зависимостей и при этом иметь возможность быстро инжектить зависимости в модули.
🔥5💊2 2
В этом видео обсудили Telegram ботов, а также пообщались с автором одной из популярных библиотек для разработки Telegram-ботов на Kotlin. Присоединяйтесь к обсуждению в комментариях!
Ссылка на GitHub: https://github.com/y9san9/ktgbotapi-stream-bot
Ссылка на канал: @ktgbotapi
YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴 Стрим в воскресенье в 17:00
В это воскресенье мы посмотрим на то, как на Kotlin можно писать приложения, которые используют AI под капотом. Рассмотрим различные инструменты, как официальную библиотеку от JetBrains – koog, так и Kotlin SDK для Model Context Protocol, а также на весь существующий тулинг для разработки таких приложений.
А ещё для хейтеров AI поразмышляем над тем, насколько нужно вообще разработчикам языка делать такие инструменты как koog и какое дальнейшее развитие может получить этот тулинг.
Telegram | YouTube | Twitch
В это воскресенье мы посмотрим на то, как на Kotlin можно писать приложения, которые используют AI под капотом. Рассмотрим различные инструменты, как официальную библиотеку от JetBrains – koog, так и Kotlin SDK для Model Context Protocol, а также на весь существующий тулинг для разработки таких приложений.
А ещё для хейтеров AI поразмышляем над тем, насколько нужно вообще разработчикам языка делать такие инструменты как koog и какое дальнейшее развитие может получить этот тулинг.
Telegram | YouTube | Twitch
🔥13
Не так давно у нас был стрим по этой теме, и вот он вылился в доклад. Сегодня я буду рассказывать его в Санкт-Петербурге на втором митапе сообщества Kotlin Russia.
Морали две:
• Подписывайтесь на @kotlin_russia, чтобы участвовать в бесплатных сходках котлинистов по разным городам России.
• Подписывайтесь на @kotlinmeta, чтобы слушать интересный контент, который потом выливается в доклады.
Записи конкретно этого доклада не планируется, но я либо потом запишу отдельный видос, либо всё-таки решим вопрос с записью, либо расскажу на другой конфе. Keep it up!
P.s.: По этой причине стрима сегодня не будет, он переносится на завтра.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8 6 4🤗1 1